ホームページ >バックエンド開発 >Python チュートリアル >Pythonにおける浮動小数点数の原理と演算を詳しく解説
この記事では、主に Python の浮動小数点数の原理と演算分析を紹介し、Python の浮動小数点数演算でよくあるエラーを例の形で分析し、浮動小数点数演算の原理と比較演算の実装方法を簡単に説明します。次へ
この記事の例では、Python における浮動小数点数の原理と演算について説明します。以下のように、参考のためにみんなと共有してください:
最初に直観に反する例を見てください:
>>> s = 0. >>> for i in range(10): s += .1 >>> s 0.9999999999999999 # 错误被累加
次に、判断のロジックに直接影響を与えるより一般的な例を見てください:
>>> from math import sqrt >>> a = sqrt(2) >>> a*a == a False
その理由上記の結果は、Python (より正確には、コンピューターのハードウェア アーキテクチャ) による浮動小数点数の表現にあります。10 進数を 0.1 に変換する方法について、コンピューターの (2 進数に基づく) 表現を見てみましょう。 2 進数の 10 進数については、Python Decimal を参照してください。小数点を 2 進数の 10 進数に変換したり、その逆を行ったりすることができます。 10 進数の 0.1 を 2 進数に変換すると、結果は 0.0001100110011001.... となり、コンピュータは無限の結果を表示できず、結果を切り捨てることしかできません。これが浮動小数点精度の問題の根本です。
"==" on floats
上記の考慮事項に基づいて、浮動小数点数の等価比較を実行する場合、一般的なアプローチは、特に注意する必要があります。浮動小数点数が等しいかどうかをテストするのに、それらが十分に近いかどうかをテストします、
>>> a = sqrt(2) >>> abs(a*a-2) < epsilon # 判断是否小于某一小量
以上がPythonにおける浮動小数点数の原理と演算を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。