2016-11-11 4 views
0

は、数値的安定性に少し遊んで、これが分かって:なぜこのpython数値エラーが起こっていますか?

>>> sum([1e4,1e20,-1e20]) 
16384.0 

を任意のアイデアを、なぜこの出来事はありますか?

+6

浮動小数点数が不正確なのはなぜですか?(http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate) – Kevin

+0

浮動小数点数が壊れていますか?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

答えて

3

Pythonの浮動小数点表現では、十桁の有効数字がサポートされていないため、最初の2つの数字を正確に集計することはできません(16桁の数字をサポートしています。 Pythonは、仮数の最下位部分の1ビットで答えを近似しています。

3番目の数値を追加した後の回答と予想される回答の差は、中間結果の表現におけるエラーを表します。その減算の後、仮数部のその1ビットはすべて残されます。指数が正規化されると、16384が残されます。これは2つのヒントの力で、何が起こっているのかを知ることができます。

関連する問題