重複の可能性:
浮動小数点値の比較 浮動小数点値
を比較するのはどれほど危険ですか?
プログラミングで実数の比較が悪い習慣である理由がわかりません。もちろん、実数はある程度の精度で表現できることは理解しています。この種の数字を比較してはいけない重大な理由を教えていただけますか? 例は良いでしょう、記事も大歓迎です。事前に感謝します。
重複の可能性:
浮動小数点値の比較 浮動小数点値
を比較するのはどれほど危険ですか?
プログラミングで実数の比較が悪い習慣である理由がわかりません。もちろん、実数はある程度の精度で表現できることは理解しています。この種の数字を比較してはいけない重大な理由を教えていただけますか? 例は良いでしょう、記事も大歓迎です。事前に感謝します。
floating-accuracy
このサイトのタグの下からのすべての質問から、議論はおそらくこの質問への参照から始める必要があります:浮動小数点値を比較することはどれほど危険ですか?
そして、DavidGoldbergによる「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」への参照。ここに短い要約があります。
1.正確な浮動小数点の結果は移植できません
浮動小数点演算は可換でも結合でもありません。ほとんどのコンパイラとプラットフォームが準拠しているIEEE754標準は、結果の正確な再現性を保証するものではありません。また、結果はプロセッサによって異なります。
2.浮動小数点の比較は数学と一致しません
次のステートメントを検討してください
int i = 0; double x = 1.0;
while (x != 0.0) { x = x/2 ; i++;}
実数では、この計算は決して完了しないはずですが、浮動小数点では終了します。の値はi
、基盤となるハードウェアによって異なります。浮動小数点比較を使用すると、コードの分析がより困難になります。
3.それでは、なぜ浮動小数点比較がハードウェアに実装されているのですか?
正確な浮動小数点の等式が必要な場所があります。1つは、浮動小数点数の正規化です。