- ベストアンサー
ExcelでPCによって計算結果が違う
- Excel2003 SP2を使用しています。上司のPCと私のPCでセルの演算結果が異なります。PCが演算する際にどう計算しているかを知りたいです。
- Excelに限らずコンピューターは浮動小数点誤差が生じるものと聞いていますが、演算結果がどうしても同じにならないことに困っています。
- 甲から乙に送り返されたファイルでは、甲の演算能力に依存した演算結果と乙の演算能力に依存した演算結果が異なっていることがわかりました。問題の解決法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 しばらく調べてみました。 まず、私は、IEEE754倍精度型浮動小数点自体の誤差と、Excelの丸め誤差とは、日経のどなたかが書いている問題を100%信じてよいのか、少し疑問に思っています。これは、別のところにも書いたのですが、Excelの補正処理はある程度されていますから、ワークシート上で最近接偶数丸めを、そのままむき出しでユーザーが体験しているわけではありません。 本来、Microsoft が、不完全な補正処理に出会うのだと思っています。浮動小数点丸め誤差自体は、VBA側の問題であって、ワークシートの問題は、その処理の仕方などは違います。 それと、#5のMicrosoft サポートの内容は、英文から読み直してみましたが、今回の件とは違うような気がします。 しかし、私も、どう考えても、PCの違いで、誤差が発生するということはありえません。 Microsoft が示すように、Excel 2003 とExcel 2007 に対する、それ以下のバージョンでは、その動作が変わるということは、Microsoft サポートの#5のリンク先の通りです。 しかし、今回の表の数値自体では、Microsoft の説明にあるように、大きな数値と小さな変化に対して、下位バージョンで、エラーが発生するわけで、単純な一次関数で問題は発生しません。下位バージョンで試してみました。ただし、エラー値が入ることで、x値とy値の対比が完全ではないように思うのです。予測値をエラーの代わりに生めて上げるか、図のようなデータ自体に補正させてあげる必要があるのではないか、と考えます。 ="" で間を埋めているので、完全な空ではありません。 つまり、INTERCEPT やSLOPE関数ではなく、元の数式から作る方法なら、誤差は出ないように思います。 B22 平均 =AVERAGE(B7:B2 B23 標準偏差 =STDEVP(B7:B21) F23の式 相関係数 =F22/(B23*C23) ------ =平均値/(xの標準偏差*xの標準偏差)
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 最初に関係ないけれども、以下では、そのままに入らないはずですから、NA()にしてあげないといけないはずです。 =IF($B7<30,#N/A,$A7*2) ↓ =IF($B7<30,NA(),A7*2) それで、その誤差は、同じバージョンで試されたものではないはずです。 Microsoft サポートに出ています。 Excel の統計関数:INTERCEPT http://support.microsoft.com/kb/828234/ja (和文は、機械翻訳です)Article ID: 828234 ここに、 Excel 2003より前のバージョンでは、INTERCEPTは丸め誤差を表示する。 Excel 2003とExcelのその後のバージョンでは、INTERCEPTの動作を改善している。 Excel 2003やその後のバージョンでは、INTERCEPTのコードは、直接変更はしていないが、SLOPEが改善されたために、INTERCEPT側ものその動作は改善された。 (英文の拙訳) と書かれています。
お礼
長らくアクセスできず、 お返事が遅くなってすみませんでした。 結局、マシンスペックによってはエクセルの計算結果が信用できないこともありうる、ということで納得することにしました。 ありがとうございました。
補足
ご回答ありがとうございます!返事が遅れて申し訳ございません。 きちんと確かめてお礼を正式に返した方が良さそうなので、8日(月曜)以降までお待ちください。 >その誤差は、同じバージョンで試されたものではないはずです なるほど、その可能性はありそうです。同じに見えるけれど違うEXCELを使っている、というのが一番自然な解釈ですものね。 ところで、 >そのままに入らないはずですから、 とおっしゃっていますが、NA()にしなくても、#N/A のままで、文字ではなくエラー値の #N/A として認識してくれているようですが?
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは 下記の条件で、同じことを試みてみました。 変な現象は出ませんでした。 Intel Pentium(R)4、Memory 1GB Windows XP SP3 Excel 2003 SP3(Microsoft office Pro 2003) 同一バージョンのExcelで、しかも同じ式で結果が異なるとは解せないですね。 Excelは、浮動小数点演算をするときは、CPUに実装されているIEEE形式をサポートしたハードウェアを使うのでしょう? とすれば、OS(この場合Win)がCPU内蔵の浮動小数点演算をサポートするハードウェアが返した値を正確にExcelに伝えられない状況が発生しているか、浮動小数点演算をサポートするハードウェアが壊れていて、Excelが自前のエミュレーションルーチンで計算しているためかという推測をしたくなりますが、結果の違いが「誤差」の範囲を超えているような気がして..(--; OSかCPUが壊れてるっぽい..とかExcelの再計算を見張っていて計算結果を狂わすユニークなウィルスを飼っているとかm(__;mすいません
お礼
長らくアクセスできず、 お返事が遅くなってすみませんでした。 結局、マシンスペックによってはエクセルの計算結果が信用できないこともありうる、ということで納得することにしました。 ありがとうございました。
補足
ご回答ありがとうございます!返事が遅れて申し訳ございません。 きちんと確かめてお礼を正式に返した方が良さそうなので、8日(月曜)以降までお待ちください。 >結果の違いが「誤差」の範囲を超えているような気がして.. まさに同感です。上司に向かって「私の作ったファイルは正しいが、そちらのPCが壊れています」「ウィルスを飼っている可能性があります」とも言いにくいし、他人のPCを徹底的に調べるのも難しいので、 皆さんには申し訳ないのですが、今回の問題の落とし所は結局、 「他人のPCで正しく計算結果が表示されなかったファイルは、使わないでおく」 「何が原因だったのかの調査は、うやむやのまま打ち切る」 ということになりそうです。 皆様が同じ問題に興味を持ち、「では私のPCでは演算結果が正しく表示できるのだろうか」と実演までして原因をさぐってくださるご厚意には、たいへん感謝しております。
- nrb
- ベストアンサー率31% (2227/7020)
いや書くの忘れてました・・・・ 演算誤差がある、ということは回答していますが、演算誤差に違いがあることに対して、回答してませんね。 確かに・・・ 有り得なくは無いんですが、現状 OSがXP以後でCPUがMMX(だったかな)ならばWINでは計算事態は同じ成ります ただし式が同じって条件です A*B*C と C*B*A では最終桁が変わることは有ります 判り易いように書くと 仮に少数以下は無いと判り易くします 1÷10×10=0 1÷10では少数以下は表示できません 0.1は0とされる したがって0と計算される と 1×10÷10=1 成ります これが計算の誤差の実例です また EXCEL数値の有効桁数は15桁です。数値表現他、演算全て標準のIEEEですのでこれ以上の精度を求めることはできません こんなソフトなど使うことになります Vector:CalmCalc (Windows95/98/Me / パーソナル) - ソフトの詳細 http://www.vector.co.jp/soft/win95/personal/se147355.html 同じと思っても計算の順序で差異ができます これは計算方法で多少は回避できます 他には 表示方法です エクセルではセルごとに制限を掛けることができます 少数以下切捨て 少数○桁まで とか たぶんこれじゃないかね
お礼
再度のご投稿は、気にかけてくださっているということで、たいへんありがたいです。 >WINでは計算事態は同じ成ります という部分は、失礼ですが、 WINDOWSでは、計算自体は同じになります と読み替えればよろしいですか? 乙(私のPC)と甲(上司のPC)で全く同じEXCELファイルを開いただけなので、計算自体は同じはずです。(上司も、初め配列数式ではない入力をしましたが、その後配列数式として入力し直しました。) 同じ理由によりセルの書式設定による違い (少数以下切捨て、少数○桁まで、とか) も今回はありませんし、お題に挙げた通り、全セルの書式はデフォルトの「標準」です。 ご意見をくださったのに否定して申し訳ないのですが、今回PCに計算させようとしている近似直線の式そのものは単純なので($A7*2 と $A7 を比較するのだから、Y=2X )、 傾きは 2 か 2.0 か、… 2.0000000 であると期待できるので、 1.999996633 ぐらいだったら「誤差」でも納得できるのですが、 1.888 という結果は不可解です。 整数のみとはっきりしていれば、INT や ROUND などを組み合わせることによって、倍精度の誤差を最小限にすることができるかも知れませんね。残念ながら今回のファイルは実験なので、本番では、小さな整数ではなく、有効数字5桁程度の小数の精度が欲しいです。 ご指摘の通り、「計算の順序」ということに大義では含まれそうですが、配列数式の演算がPCに想像以上の負荷をかけているのではないかな、と私は感じています。 ありがとうございました。
- kotoby2003
- ベストアンサー率15% (280/1754)
機種(もしくはOS?)の違いによって、演算精度が異なる、というのは初耳で、へーっと思ってしまいました。 そういう現象に出会ったことはありませんでしたが、ありえなくないですね。(演算ユニットにバグがあるとか) でもその前に、 Excelのオプションに、「計算方法」というタブがあるのですが、その設定に違いがあったりしませんか? あと、実際に操作している人が異なるので、本当に同じ操作をしているのか、疑問が残ります。 言われたとおりにやってる!といっても、実は違うということはよくあります。 No.1さんは、演算誤差がある、ということは回答していますが、演算誤差に違いがあることに対して、回答してませんね。 同じ規格で計算しているのに、結果が異なるのはおかしな話です。 この誤差が事実なら、どちらかの演算ユニットに規格に沿ってないバグがあるはずです。
お礼
長らくアクセスできず、 お返事が遅くなってすみませんでした。 結局、マシンスペックによってはエクセルの計算結果が信用できないこともありうる、ということで納得することにしました。 ありがとうございました。
補足
ご回答ありがとうございます!返事が遅れて申し訳ございません。 きちんと確かめてお礼を正式に返した方が良さそうなので、8日(月曜)以降までお待ちください。 >同じ規格で計算しているのに、結果が異なるのはおかしな話です。 私が困ったのも、正にこの部分なのです。こちらのPCで「よしできた」と思った演算式が、他人のPCで再現できないなんて、「どうすりゃいいんだ!」って感じですよね。
- nrb
- ベストアンサー率31% (2227/7020)
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml あとはCPUとOS問題 http://support.microsoft.com/kb/402554/ja Windows上でのごくごく一般的な環境では、floatはIEEE754単精度浮動小数点数形式(以下単精度)、 doubleはIEEE754倍精度浮動小数点数形式(以下倍精度)として実装してます 解決方法はありません 必ず起きます 少なくするには計算方法の見直しや 誤差を修正するプログラムなどご自身でプログラム組んでください
お礼
素早いご回答、たいへん感謝しております! やはりCPUとOSの差による影響は、Excelでも避けられないのですね…。 近似式をPCが正確に求めてくれないのは非常に困るのですが、誤差を予測・修正する方法がわからないので、あきらめます。 (マクロ上で、FOR~NEXTループ で 点と直線の距離 を求めさせ続けるのは私でもできそうですが、一関数の代替としてそこまでやるのはこちらの都合ではあまり現実的ではありません。) アドバイスに従って、「誤差は必ずあるもの」誤差を「少なくする」方向で、見直していきたいと思います。ありがとうございました。
お礼
再度のご投稿、ありがとうございます! Microsoft サポートでいう、 (Excel 2003 および)以降のバージョンの Excel とは、Excel 2003「ではない」ものを指すのか、 Excel 2003 に修正モジュールを適用したものを指すのか、解釈を困っておりました。 なるほど、SLOPE関数を使うと傾きが一瞬で出る、という便利さに慣れ過ぎていましたが、道具がおかしいと思われる時には原点に戻って、式を立てると目が覚めるものですね!こうしたアプローチがある、というヒントをくださったことに感謝しております。難しく考えていましたが、なるほど、最小二乗法で近似式を出すということは、標準偏差の比を取るということと同じですね。このアプローチに従って、数学を勉強してみます。