Python の浮動小数点数の丸め誤差: 謎を解く
数値計算の領域での浮動小数点数の扱いポイント番号は精度が限られているため、問題が発生する可能性があります。パラメーターの変化を含む Python スクリプトの実行中に、特定のデルタ値 (0.29 および 0.58) の結果が表示されないという予期せぬ問題が発生しました。詳細な調査により、根本的な真実が明らかになりました。それは、Python には特定の数値を浮動小数点として正確に表現する能力が本来備わっていないということです。
この現象を示すために、次のコード スニペットは、ある範囲の整数を浮動小数点数に相当するものに変換しようとします。
for i_delta in range(0, 101, 1): delta = float(i_delta) / 100
興味深いことに、29 や 58 などの特定の整数の場合、結果の float 値は(それぞれ 0.28999999999999998 と 0.57999999999999996) は、予想される同等の値 (0.29 と 0.58) と一致しません。この矛盾は、浮動小数点演算の基本的な制限に根ざしています。
すべての浮動小数点システムは、基数、指数、および固定数の有効ビットの組み合わせを使用して実数を近似します。特定の値、特に 2 の累乗として正確に表現できない小数部分を含む値は、本質的に正確に表現することが困難です。したがって、これらの値は、保存中および計算中に丸められるか、近似されます。
この丸めの影響を視覚化するために、実際の整数とその浮動小数点数の近似値との不一致を示す Python スクリプトが考案されました。
import sys n = int(sys.argv[1]) for i in range(0, n + 1): a = int(100 * (float(i) / 100)) if i != a: print i, a
この動作を示す数値には識別可能なパターンがないように見えますが、根底にある原理は変わりません。つまり、正確に表現できない数値はすべて変わりません。 2 の正確なべき乗の組み合わせは、float として保存されるときに近似される可能性があります。
浮動小数点演算の複雑さとコンピューティングにおけるその結果を深く掘り下げるには、「What Every Computer」などのリソースを調べます。科学者は浮動小数点演算について知っておくべき」を強くお勧めします。数値解析の落とし穴を回避し、計算の精度を確保するには、これらのニュアンスを理解することが最も重要です。
以上がPython で浮動小数点として表現すると、一部の 10 進数が不正確に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。