アカウント名:
パスワード:
ε 1+ε (1+ε)-14.30E-15 1.00E+00 4.22E-154.20E-15 1.00E+00 4.22E-154.10E-15 1.00E+00 4.00E-154.00E-15 1.00E+00 4.00E-153.90E-15 1.00E+00 4.00E-153.80E-15 1.00E+00 3.77E-153.70E-15 1.00E+00 3.77E-153.60E-15 1.00E+00 0.00E+003.50E-15 1.00E+00 0.00E+003.40E-15 1.00E+00 0.00E+00
以前よく取りざたされた演算誤差(本家記事 [microsoft.com]、分析記事 [mie-u.ac.jp]、対策紹介 [nikkeibp.co.jp])なんかはどうなったんだろ?
演算誤差自体は、浮動小数点演算を使う以上避けられないもので、どうなったも何もありません。
「分析記事」のリンク先である奥村晴彦さんの「Excel の演算誤差 [mie-u.ac.jp]」で扱っているのは、演算誤差そのものではなく、 Excel では時々計算結果がゼロに「補正」されてしまい、しかもどんな場合に「補正」されるかよくわからない、という問題ですので、誤解のなきよう。倍精度浮動小数点数を使っていれば本来現れるはずの誤差が、この「補正」のせいで現れない場合があります。なぜか OpenOffice.org の Calc については奥村さんと同じ実験をしている人が複数いるのに、このストーリーの主役のはずの Excel 2007 での結果を書いている人がいないので書いておくと、 Excel 2007 でも奥村さんの Excel 2000 での実験結果と変わりません (減算では Excel 2000 の場合と同じ =(1+1.6E-15)-1 以降でゼロになり、式全体を括弧で囲めば本来の通りに誤差が出ます)。
# calc.exeの拡張精度機能(意外に高性能なんだよねぇ)とか、他のソフトにも搭載すればいいのに、と思っても互換性の足かせとかで実現できないんだろうか(いまさらそんなこと言わないで直せばいいんじゃないかという気もするけど)
なんと、 Windows 標準の calc.exe では倍精度浮動小数点数より良い精度の演算ができるのですね (Windows XP SP2 で確認)。知りませんでした。昔からそうなのでしょうか。
他のソフトで精度の高い演算が使われない理由は、互換性の問題というよりは、ほとんど必要とされていないからでしょう。何桁使えれば十分かが場合によって違っているので、結局どこかで妥協しなければならないのではないかと思います。妥協する点として、倍精度浮動小数点数を使うのは合理的だと思います。数値計算をすることが主目的のソフトであれば、多倍長計算をして、しかも精度をユーザーが指定できるようにすれば良いのでしょうが、一般的な表計算ソフト等に求められている機能ではないでしょう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
ショッキングというか (スコア:2, 興味深い)
以前よく取りざたされた演算誤差(本家記事 [microsoft.com]、分析記事 [mie-u.ac.jp]、対策紹介 [nikkeibp.co.jp])なんかはどうなったんだろ?
# calc.exeの拡張精度機能(意外に高性能なんだよねぇ)とか、他のソフトにも搭載すればいいのに、と思っても互換性の足かせとかで実現できないんだろうか(いまさらそんなこと言わないで直せばいいんじゃないかという気もするけど)
おれが調べてやるよ (スコア:4, 興味深い)
まずは奥村先生の表 [mie-u.ac.jp]を再現するとこから。 0に落ちるのが早すぎる。
3.77E-15 ≒ 2-48+2-52
4.00E-15 ≒ 2-48+2-52+2-52
4.22E-15 ≒ 2-48+2-52+2-52+2-52
精度は少なくとも2-52まであるが、計算結果が2-48以下になったあたりで意に反して0に修正されている。
括弧で囲んだり、1を掛けたりしても結果は変わらず。
つまり、演算の途中で閾値を割り込むと強制的に0に修正される?
結論
表計算ソフトはやっぱりよく分からん理屈で動いてる
あと、数値計算には使うな
Re:おれが調べてやるよ (スコア:3, 興味深い)
ちなみにUbuntu 7.04/i386, OOo 2.2です。
Re:おれが調べてやるよ (スコア:2, おもしろおかしい)
つまりExcelは仕様書作成ツールであると!
#やーめーてー
これでまた (スコア:0)
Re:これでまた (スコア:1, おもしろおかしい)
Re:これでまた (スコア:0)
演算精度 (Re:ショッキングというか) (スコア:1)
演算誤差自体は、浮動小数点演算を使う以上避けられないもので、どうなったも何もありません。
「分析記事」のリンク先である奥村晴彦さんの「Excel の演算誤差 [mie-u.ac.jp]」で扱っているのは、演算誤差そのものではなく、 Excel では時々計算結果がゼロに「補正」されてしまい、しかもどんな場合に「補正」されるかよくわからない、という問題ですので、誤解のなきよう。倍精度浮動小数点数を使っていれば本来現れるはずの誤差が、この「補正」のせいで現れない場合があります。なぜか OpenOffice.org の Calc については奥村さんと同じ実験をしている人が複数いるのに、このストーリーの主役のはずの Excel 2007 での結果を書いている人がいないので書いておくと、 Excel 2007 でも奥村さんの Excel 2000 での実験結果と変わりません (減算では Excel 2000 の場合と同じ =(1+1.6E-15)-1 以降でゼロになり、式全体を括弧で囲めば本来の通りに誤差が出ます)。
なんと、 Windows 標準の calc.exe では倍精度浮動小数点数より良い精度の演算ができるのですね (Windows XP SP2 で確認)。知りませんでした。昔からそうなのでしょうか。
他のソフトで精度の高い演算が使われない理由は、互換性の問題というよりは、ほとんど必要とされていないからでしょう。何桁使えれば十分かが場合によって違っているので、結局どこかで妥協しなければならないのではないかと思います。妥協する点として、倍精度浮動小数点数を使うのは合理的だと思います。数値計算をすることが主目的のソフトであれば、多倍長計算をして、しかも精度をユーザーが指定できるようにすれば良いのでしょうが、一般的な表計算ソフト等に求められている機能ではないでしょう。
Re:ショッキングというか (スコア:0)
ゼロの近傍でのtanhの精度が悪いのとか、直ってますか?
# エラい人の御筆先であると云う理由で、直すに直せないケース…でないといいなぁ。
Re:ショッキングというか (スコア:0)
Re:ショッキングというか (スコア:0)
# ってことは、バグって「100,000」と表示されたセルをコピーして他のアプリに貼り付けたら正常な表示に戻るのかな?(手元にソフトがないから検証できない)
# にしても、
Re:ショッキングというか (スコア:2, 興味深い)
このばやいも、B1の数値自体は間違っておらず、表示だけがおかしいようですね。表示が異常な状態も引き継がれている?
あと、"=A1-1"は正しく65534でした。
微妙なバグだ……。
Re:ショッキングというか (スコア:1)
・A1をコピーして、OOo CalcのA1に貼り付け
・"Book1.xls"(not xlsx)として保存、Clacで開く
共に65535でした。
#もう何が何だか