背景
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
検証方法
以下の手順で検証した。- A1セルに =0.5 - 0.4 - 0.1 を入力する。
- A2セルに =1 * (0.5 - 0.4 - 0.1) を入力する。
- A3セルに =(0.5 - 0.4 - 0.1) を入力する。
- A1~A3セルの書式を 0.00000000000000E+00 に設定する。
- 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 件のコメント:
コメントを投稿