double
として出力されるがあり、0.000000
それを と比較しようとしていますが0.0f
、失敗しました。なぜここに違いがあるのですか?double がゼロかどうかを判断する最も信頼できる方法は何ですか?
12731 次
4 に答える
20
0.000000
小数点以下 6 桁まで出力されるほど十分にゼロに近いかどうかを判断するには、次のようにします。
fabs(d) < 0.0000005
ただし、浮動小数点計算の小さな不正確さに対処することは、一般的に非常に複雑になる可能性があります。
取得した値をよりよく理解したい場合は、%g
代わりに を使用して印刷してみてください%f
。
于 2011-08-10T09:38:52.050 に答える
4
これは、最新のコンピューターにおける浮動小数点演算の根本的な問題です。それらは本質的に不正確であり、確実に比較することはできません。たとえば、言語 ML では、実数型での等値比較は安全でないと見なされたため、明示的に禁止しています。このトピックについては、David Goldberg による優れた (少し長くて数学的なものではあるが)論文も参照してください。
編集: tl;dr: 間違っている可能性があります。
于 2011-08-10T09:40:02.563 に答える
4
範囲を行うことができます。-0.00001 <= x <= 0.00001 のように
于 2011-08-10T09:39:47.697 に答える