17

doubleとして出力されるがあり、0.000000それを と比較しようとしていますが0.0f、失敗しました。なぜここに違いがあるのですか?double がゼロかどうかを判断する最も信頼できる方法は何ですか?

4

4 に答える 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 に答える