将float与常量进行比较时的奇怪行为

时间:2012-05-31 18:50:13

标签: c++

我对这种奇怪的行为感到震惊:

float pi = 3.14;

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

有人能解释一下吗?

2 个答案:

答案 0 :(得分: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?";

答案 1 :(得分:1)

因为默认值(如3.14)被视为double,但将此值中的一个存储在float变量中会导致精度损失;因此,存在与不同精度相关的微观差异。 这就是为什么不应该在大多数时间直接比较浮点数。