1

我被这种奇怪的行为震惊了:

float pi = 3.14;

if(pi == 3.14)
    cout << "OK";
else
    cout << "How is it possible?";

谁能解释一下?

4

2 回答 2

4

if语句中的常数是(double)3.14。它非常接近它的float版本,但不完全等于它,因为3.14没有精确表示。

尝试使用相同的技巧1.25或任何其他可以精确表示的数字,您将得到一个OK.

float num = 1.25;
if(num == 1.25)
    cout << "OK";
else
    cout << "How is it possible?";

你也可以投到3.14得到float一个OK

float pi = 3.14;

if(pi == (float)3.14)
    cout << "OK";
else
    cout << "How is it possible?";
于 2012-05-31T18:51:30.457 回答
1

因为默认情况下 like3.14被视为双精度值,但是将其中一个值存储在浮点变量中会导致精度损失;因此存在与不同精度相关的微观差异。这就是为什么大多数时候不应该直接比较浮点数的原因。

于 2012-05-31T18:51:35.253 回答