ホームページ >バックエンド開発 >Python チュートリアル >Python の浮動小数点演算で予期しない結果が生じることがあるのはなぜですか?

Python の浮動小数点演算で予期しない結果が生じることがあるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 16:12:02517ブラウズ

Why Does Python Floating-Point Math Sometimes Produce Unexpected Results?

Python の浮動小数点数の計算が間違っているように見えるのはなぜですか?

Python で浮動小数点数を扱うとき、結果は予期した値と予想外に異なります。例:

>>> 4.2 - 1.8
2.4000000000000004

ここでの差は予想される 2.4 ではなく、2.4000000000000004 です。 Python はなぜこれらの値を不正確に計算するのでしょうか?

答え: 浮動小数点の精度

この問題は、浮動小数点表現の固有の性質に起因します。コンピュータはすべての実数を正確に表現できないため、浮動小数点数はコンピュータ メモリ内で実数を近似するために使用されます。この近似では丸め誤差が発生し、計算にわずかな違いが生じる可能性があります。

IEEE-754 表現について

浮動小数点数は通常、IEEE-754 を使用して表現されます。標準。浮動小数点値の形式と精度を定義します。この規格では、浮動小数点数を 3 つの要素に分割します:

  • 符号: 数値が正か負かを示します。
  • 指数: 分数が計算される 2 の累乗を表します。
  • 小数: 数値の小数部分を表すバイナリ値。

浮動小数点精度の制限

各コンポーネントに割り当てられるビット数により、浮動小数点の精度が制限されます表現。 Python は 64 ビットの倍精度浮動小数点数を使用するため、10 進数で約 16 桁の精度が可能です。ただし、0.1 や 0.3 などの特定の実数は、有限ビットを使用して正確に表すことができないため、丸め誤差が発生します。

不正確な計算の例

上記の例は、丸め誤差が計算にどのような影響を与えるかを示しています。 4.2 ~ 1.8 の場合、減算の小数部分は 64 ビットで正確に表現できないため、結果はわずかに切り上げられます。同様に、5.1 - 4 の結果はわずかに切り捨てられ、計算値は 1.1 ではなく 1.0999999999999996 になります。

プログラマーへの影響

浮動小数点精度の間特定の用途では課題が生じる可能性がありますが、これらの数値は依然として高いことを覚えておくことが重要です。日常的な計算のほとんどに正確です。ただし、非常に正確な値や精度が重要な金融アプリケーションを扱う場合は、10 進数または固定小数点表現を使用するなどの代替アプローチが必要になる場合があります。

以上がPython の浮動小数点演算で予期しない結果が生じることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。