以下代码(行之间没有任何内容)是否总是为布尔值true
生成b
的值?
double d = 0.0;
bool b = (d == 0.0);
我正在使用g ++版本4.8.1。
答案 0 :(得分:7)
假设IEEE-754
(可能是大多数浮点表示),这是正确的,因为0.0
可以完全用所有IEEE-754
格式表示。
现在,如果我们采用另一个无法用IEEE-754
二进制格式表示的文字,例如0.1
:
double d = 0.1;
bool b = (d == 0.1);
这可能会导致false
对象中的b
值!
该实现有权使用double
d
精度{{1}}和更高精度来与文字进行比较。
(C99,5.2.4.2.2p8)“除了赋值和强制转换(删除所有额外的范围和精度)之外,具有浮动操作数的操作值和受常规算术转换和浮动常量限制的值将被计算为范围和精度可能大于类型所需的格式。“