ホームページ  >  記事  >  バックエンド開発  >  同じ値の float と double を比較すると false が返されるのはなぜですか?

同じ値の float と double を比較すると false が返されるのはなぜですか?

DDD
DDDオリジナル
2024-10-31 15:40:56470ブラウズ

Why Does Comparing a Float and a Double With the Same Value Return False?

Double と Float を比較すると予期しない結果が発生する

同じ値 1.1 を持つ float 変数 f と double 変数 d を比較すると、驚くべき結果が返されます。間違い。この予期しない結果は、浮動小数点数の基本的な特性に起因します。

浮動小数点数の精度と丸め

浮動小数点数 (float 型と double 型を含む)には固有の制限があります:

精度: 浮動小数点数は有効桁数の有限制限内の実数を表します。データ型が処理できるよりも高い精度が必要な値は、切り捨てられた表現になります。

丸め: 2 進数は、常に正確な 10 進数表現を持つとは限りません。 2 進数を 10 進数に変換する場合、浮動小数点型の限られた精度に合わせて丸めが行われます。

比較への影響

これらの要因により、float 値と double 値は丸め誤差が生じる可能性があります。これらのエラーは、等しいはずの 2 つの数値を比較するときに不一致を引き起こす可能性があります。指定された例では、1.1 の float 表現と double 表現には丸めによりわずかな変動があり、結果として f != d という直感に反する結果が生じます。

ベスト プラクティス

浮動小数点数間の直接の等価比較は避けてください。代わりに、値間の絶対的な差を評価し、それを許容可能なしきい値 (イプシロン) と比較することを選択します。

if (abs(x - y) < epsilon) { ... }

このアプローチは、浮動小数点演算に固有の誤差を考慮し、より信頼性の高い方法を提供します。 2 つの値が本質的に等しいかどうかを判断します。

以上が同じ値の float と double を比較すると false が返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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