基本的な浮動小数点精度の問題に苦しんでいます。問題は次のとおりです。
double d = 0.1;
d += 0.1;
d += 0.1;
d == 0.3 ? std::cout << "yes" : std::cout << "no";
コードを実行すると、「いいえ」が返されます
C/C++ は値をバイナリで格納し、バイナリ ストレージはすべての値を正確に格納できないことを理解しています。また、これらの小さなエラーは、さまざまな数学演算 (つまり、d += 0.1;) を実行するにつれて悪化することも理解しています。
私の質問は、d == 0.3 かどうかをテストする必要があるかどうかです (上記のコードの明確な意図と同様に、妥当な精度で..)...どうすればよいですか? 答えがそうでないことを願っています:
if (d > 0.2999 && d < 0.3001) ...
また..これは動作します
float f = 0.1;
f += 0.1;
f += 0.1;
f == 0.3f ? std::cout << "yes" : std::cout << "no";
しかし、言語に相当する「0.3d」は見つかりません。
ありがとう