C浮点零比较

时间:2013-12-03 21:42:05

标签: c floating-point double zero

以下代码(行之间没有任何内容)是否总是为布尔值true生成b的值?

double d = 0.0;
bool b = (d == 0.0);

我正在使用g ++版本4.8.1。

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)“除了赋值和强制转换(删除所有额外的范围和精度)之外,具有浮动操作数的操作值和受常规算术转换和浮动常量限制的值将被计算为范围和精度可能大于类型所需的格式。“