我被这种奇怪的行为震惊了:
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
谁能解释一下?
我被这种奇怪的行为震惊了:
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
谁能解释一下?
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?";
因为默认情况下 like3.14
被视为双精度值,但是将其中一个值存储在浮点变量中会导致精度损失;因此存在与不同精度相关的微观差异。这就是为什么大多数时候不应该直接比较浮点数的原因。