ホームページ >バックエンド開発 >Python チュートリアル >Python での浮動小数点計算により予期しないファイル名が生成されるのはなぜですか?

Python での浮動小数点計算により予期しないファイル名が生成されるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-04 07:25:15561ブラウズ

Why Do Floating-Point Calculations in Python Lead to Unexpected Filename Generation?

Python の浮動小数点精度

浮動小数点数を使用して計算を実行する場合、潜在的な丸め誤差に注意することが重要です。 Python では、浮動小数点数の動作が予期しない場合があり、シミュレーションで結果が欠落することがあります。

丸めの問題の説明

次の Python コードを考えてみましょう:

for i_delta in range(0, 101, 1):
    delta = float(i_delta) / 100 
    ...
    filename = 'foo' + str(int(delta * 100)) + '.dat'

このコードでは、float(29) / 100 が正確ではないため、丸め誤差が発生します。 0.29 ではなく、0.28999999999999998 です。この近似により、delta = 0.29 に対して正しいファイル名が生成されなくなります。

丸め誤差のパターン

丸め誤差は、すべての整数にわたって一貫していません。このパターンを調査するために、次の 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 のべき乗として表現できない数値は、浮動小数点数として正確に表現できません。このような場合、浮動小数点数は近似値を提供しますが、実際の値よりも小さくなる場合があります。

解像度

これらの丸め誤差を回避するには、次のことをお勧めします。正確な数値表現が必要な計算に 10 進数 (例: Decimal モジュールまたは分数モジュール) を使用します。

以上がPython での浮動小数点計算により予期しないファイル名が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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