• 締切済み

Excelの引き算の答えについて。

エクセルで「=500-498.2」と入力すると、そのセルには「1.8」になるのですが、そのセルを値のみコピーにすると「1.80000000000001」になります。 いろいろ試してみたところ、 10-9.8=0.199999999999999 1400-1396.3=3.70000000000005など、位が少なくなるときにおこるようです。 これは、バグなのかわざとなのかどちらでしょうか。 別に今現在困っているというわけではないのですが、偏差値の計算をしているときに偶然答えが0になるはずのところが10のマイナス乗で表示されたので、気持ち悪くて・・・(笑) 単純に知りたいだけです。 バグじゃないとしたら、どういう理屈、条件でこのような計算結果を返すのか教えてください。 ちなみに、MacとWindows両方のOSで確認されました。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

原因は、演算処理を速めるために、小数点演算は、倍精度浮動小数点型の数字を2進で行い、最近接偶数丸めが行われているから、誤差が発生するのだ、ということですが、当然、ワークシート上は、ある程度の補正処理がなされているということです。 しかし、『安易に丸め誤差には結び付けないほうがよい』ということを言わせていただきます。 つまり、演算誤差ではないということです。 私は、数年の間、以下の文面の[引き算や割り算]=[演算の一部]と間違った理解をしていました。 「原則:×[小数点を含む、引き算や割り算は、]-->○[すべての小数点は演算しなくても、]丸め誤差が発生することがあります。関数のMOD,CEILING,FLOOR に、見かけ上は、引き算はなくても、小数点を用いると誤差が発生することがあります」 日経BP21で、昔、芳坂氏がセンセーショナルな内容の「浮動小数点の丸め誤差」についての記事を書きましたが、当時の彼は、それほど詳しくなかったようですし、また、Microsoft の提灯持ちのような記事に、大した内容があるわけではありません。まして、記事の結論が、VBAのユーザー定義関数での処理では、あまり関心しませんでした。インターネットに繋げられる限りは、記事を書く前に、もう少し文献なりを読んで、まとめることが必要だったと思いますし、基本的な用語のミスは訂正すべきだったと思います。 彼の記事で書かれていない基本的なことで、これは、マイクロソフト側のMSDNに出てきますが、対処法には、整数法、小数点固定法の二つがあります。 整数法 =(500*10-498.2*10)/10 小数点固定法 =VALUE(FIXED(500-498.2)) http://support.microsoft.com/kb/78113/ja つまり、この文章には、疑問符がつくということです。各社各様に、表計算の誤差に対処していたけれども、過去可能であって、現在のMicrosoft が出来なかったのは、IBMの確執に原因があるのではないか、と推測しています。 A1: B1: 0.375111 --> =ROUNDUP(A1,6) --結果 0.375112 A1: 0.374111 --> 〃      --結果 0.75111  Excel 2003では発生する、 Excel2007では修正済み これでは、ROUND関数による四捨五入は不可能だということになります。最近接偶数丸めによるものですが、果たして、ワークシートにそのようなものが関係あったのか疑問です。もし、単に、浮動小数点演算誤差だけの問題なら、発生するはずがありません。 B.D. McCullough, David A. Heiser 共著の論文で、"On the accuracy of statistical procedures in Microsoft Excel 2007"(Computational Statistics & Data Analysis)にも出ていますが、前製品のExcel 2007は、3つの分野の標準的中程度・精度テストには通らなかったと報告されています。 {Excel 2007, like its predecessors, fails a standard set of intermediate-level accuracy tests in three areas...} http://www.jstatsoft.org/v34/i04 On the Numerical Accuracy of Spreadsheets 現在のCPUでは、演算処理が速いので、10進に計算させても、ほとんど私たちの感覚では区別がつかないはずです。当初のExcelの開発者も今はいないし、ただ、インターフェースだけを換えて、十数年以前の製品を使わされている可能性が高いように思います。 何の解決にもなりませんが、三重大教授というよりも、PC-Van やTex で有名な奥村晴彦さんが、以下で触れています。

参考URL:
http://oku.edu.mie-u.ac.jp/~okumura/software/excel/
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

コンピュータの演算は2進数で行われる事はご存知と思います。 よって、10進小数を2進数(2^-1(0.5)・2^-2(0.25)・2^-3(0.125)・・・)で表現する為、近似値になるから正確に表示できませんがバグではありません。 関連情報のサイトを紹介しますのでご確認下さい。

参考URL:
http://pc.nikkeibp.co.jp/pc21/special/gosa/
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

原因は2進数で表せない数字の演算で出てくる浮動小数点誤差(丸め誤差)によるものです(バグではありません)。 http://support.microsoft.com/kb/78113/ja 丸め誤差が出るケースでは、以下のようにROUND関数を適宜組み合わせて対処してください。 =ROUND(元の計算式,10)

関連するQ&A

  • エクセルで計算式の答えを・・・。

    エクセルで計算式で計算した答えの数字だけを別のシートにコピーしたいのです。 普通にコピーして貼り付けすると、計算式ごとコピーされるので計算結果が違ってしまいます。 例えば、A1に10 B1に5 C1に(A1*B1)と計算している場合 他のシートのひとつのセルに「50」と数字だけを入れたいのです。 このようなことが出来るでしょうか? この説明でわかりにくければ補足します。 エクセルに詳しくないので困っています。どなたか教えてください。よろしくお願いします。

  • excelで、セルの書式を、・・・繰りかえさねばなりません

    excelで、セルの書式を、標準から、%にかえると、 別の場所にセルをコピーし、その値を100で割って その答えを、値をコピーするで、コピーするでやっと答えが出ます。さらにそのような計算を何百回 も繰り返さねばなりません。 もともとのコピー元(spss出力)には、% 値が出ません。 教えてください。

  • エクセルの引き算で・・・

    こんにちは。 エクセルで引き算をするとき、 結果がマイナスである場合は、全て 計算結果を0と表示するには どうすればいいのでしょうか? (例えば、34-45=-11ですが、  この結果を0と表示させたいのです。  結果がプラスの場合は、その値を正しく  表示させたいです。     45-34=11  この場合は11と表示) よろしくお願いします。

  • エクセル計算で、答えのセルの ゼロを非表示に・・。

    エクセル初心者です。 計算式を設定し、値を挿入しなければ、ゼロが表示されます。 セルの、たて、よこが、小さく、マス目状に、答えが出るようにしていますが ゼロが表示され、実数が表示されているのと、見分けが非常に分かりずらいのです。 値が、挿入されなかったら、ゼロでなく・・・・・空白に出来ないのでしょうか よろしくお願いします。

  • excel 関数 引き算

    excel で引き算後、合計を求める計算式を教えてください。 A1に7.5 B1に5.5を入力してあります。 C1に合計値を求めたい。 ただ、 基本数値「8」から7.5 5.5を引き合計を求めたいです。 答え(合計値)(C1)は「3」になるような計算式です。         A1=0.5 B1=2.5 になるのでC1のセル計算値は「3」になります。 実際はA1~AH1まで入力されています。 途中セルには「/」とか「文字」も入力されています。 数値のみを計算したいです。 どなたかよろしくお願いします

  • エクセルで計算式の答えを

    A1で計算した答えをB1に出したいのですが、どのようにすればよろしいですか? 今までは、A1計算式のセルをコピーしてB1に貼り付けて計算式のあたまに=をつけていたのですが、  もっといい方法があったら教えてください。

  • エクセル2000 マイナスの答えを0にしたい

    エクセル2000で計算の答えがマイナスになる場合 その答えを0にするって事は出来ますか? 掛け算でも足し算でも正数なら問題なし 例 1+1=2   1×1=1 1÷1=1  マイナスが付く場合は0にしたい 例 1-2=0  みたいな感じです 出来るならその方法を教えて下さい 出来ないなら無い・・・でいいです お願いします

  • EXCELでの時間計算(引き算)

    EXCELで時間計算をしたいのですが EXCELのセルって時間ではなく時刻しか入らないのでしょうか? 各セルabc・・・に時間(○○:××=○○時間××分 の意)を入れておき X=a+b+c+・・・ と計算したい。 ただしマイナスの時間も有る。 そのまま行うと24時間を過ぎると25時間は01を表示してしました。 時間ではなく時刻なのか? そこで色々試したところ プラスの時間だけなら セル書式設定で表示形式を ユーザー定義の [h]:mm にして 可能でした。 しかしマイナスの数字が入れられませんでした。 (マイナスの時刻と言うモノが存在しないから?) そもそも、セルの書式設定の表示形式のユーザー定義で設定できる形式って ヘルプかどこかに全部載っていますでしょうか? 人からもらったEXCEL表に たまに見たことも無い書式設定が書いてあることがあり 「そこで初めて知る」見たいなものがありましたので・・・ よろしくお願いいたします。 

  • マクロで引き算して0にする

    エクセルで任意のセルの値(正の整数)を引き算して、そのセルに”0”を表示するマクロはできますか。 たとえば、A1のセルに”50”と入力されているとき、マクロでA1のセルに”=50-50”という計算式を入力することはできますか。 データの入力されているセルのアドレス、および値ともに任意です。 教えてください。

  • Excelで計算式が正しく入らないのですが。

    Excelで計算式の入ったセルをコピーし別のセルに貼り付けると、計算式ではなくもとのセルの値が張り付きます。数式バーには計算式が入っているのですが・・・また、数式バーの最後にカーセルを合わせ、Enterを押すと正しい値に変わります。

専門家に質問してみよう