ホームページ >バックエンド開発 >Python チュートリアル >Pythonにおける浮動小数点数の原理と演算を詳しく解説

Pythonにおける浮動小数点数の原理と演算を詳しく解説

黄舟
黄舟オリジナル
2017-10-12 10:56:443173ブラウズ

この記事では、主に 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 サイトの他の関連記事を参照してください。

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