我对这种奇怪的行为感到震惊:
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
有人能解释一下吗?
答案 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变量中会导致精度损失;因此,存在与不同精度相关的微观差异。
这就是为什么不应该在大多数时间直接比较浮点数。