2016年4月18日月曜日

Excel 2013で数式のカッコの有無で計算結果が変わる例

背景

Excelの演算誤差(三重大学 奥村研究室)で紹介されている記事によれば,
Excel 2000 でも .5 - .4 - .1 は 0 になるのに 1 * (.5 - .4 - .1) は -2.78E-17 になる。 いったいどのようなアルゴリズムを使っているのであろうか。
・・・ だんだんわかってきた。 トップレベルが引き算の場合は特別なことをするようだ。 ・・・
・・・ 1 をかけないでも引き算全体をかっこでくくるだけで例外処理をしなくなることを教えていただいた。・・・
ということである。

同じ内容をExcel 2013で試してみた。


検証環境

  • OS: Windows 10 Pro(64bit)
  • アプリケーション: Excel 2013(64bit)
  • CPU: Core i7 2.4GHz
  • RAM: 16GB
  • 仮想メモリ: OFF


検証方法

以下の手順で検証した。
  1. A1セルに =0.5 - 0.4 - 0.1 を入力する。
  2. A2セルに =1 * (0.5 - 0.4 - 0.1) を入力する。
  3. A3セルに =(0.5 - 0.4 - 0.1) を入力する。
  4. A1~A3セルの書式を 0.00000000000000E+00 に設定する。
  5. A1~A3セルの値を確認する。


結果

結果は以下のとおり。Excel 2013でもExcel 2000と同様の結果になった。う~む。
  • A1セルに =0.5 - 0.4 - 0.1 を入力 → 0.00000000000000E+00
  • A2セルに =1 * (0.5 - 0.4 - 0.1) を入力 → -2.77555756156289E-17
  • A3セルに =(0.5 - 0.4 - 0.1) を入力 → -2.77555756156289E-17


0 件のコメント:

コメントを投稿