以下代码中,两行之间没有任何内容,对于布尔值变量
我正在使用g++ 4.8.1版本。
b
,是否总是会生成true
的值?double d = 0.0;
bool b = (d == 0.0);
我正在使用g++ 4.8.1版本。
b
,是否总是会生成true
的值?double d = 0.0;
bool b = (d == 0.0);
double d = 0.1;
bool b = (d == 0.1);
这可能导致b
对象的值为false
!
实现有权例如对d
使用双精度以及对字面量进行比较时使用更高的精度。
(C99,5.2.4.2.2p8) "除赋值和强制转换(它们移除所有额外的范围和精度)之外,具有浮点运算数和值以及应用通常算术转换的值以及浮点常量的操作的值被计算到一个格式中,其范围和精度可能大于类型所需的。"
==
不同的是,加法和乘法在某些情况下可能会产生不准确的结果,但是==
操作符始终可以根据其输入产生完全正确的结果。 - Eric Postpischil==
,正确的定义是如果两个输入值相等,则结果为真。你提出的.3 + .2 == .5
并不是一个反例,因为这种情况下的误差出现在加法运算中而不是等于操作,正如我之前所说的那样。 - Eric Postpischil