2008-09-16 72 views
4
#include <iostream> 
using namespace std; 

int main() 
{ 
    double u = 0; 
    double w = -u; 
    cout << w << endl; 
    return 0; 
} 

为什么正如人们所预料这个伟大的一块代码输出-0,而不是0的,?COUT打印“-0”,而不是“0”

+0

更多的上下文将被赞赏(如编译器用于开始) – Jean 2008-09-16 15:39:46

回答

13

IEEE 754浮点数标准的符号位与尾数分开,允许零为负数。 Wikipedia应该能够帮助解释这一点。

2

在IEEE浮点0-0正在“特殊值”这两个不同的值,从here

注意-0和+ 0是不同的 值,但他们都比较作为 相等。

2

的IEEE 754标准的浮点算法,使一个区别+0-0之间,这可以通过四舍五入为零凡签收仍具有重要的非常小的数字打交道时使用。

1

因为double可以确实有值-0,+ 0,-infinity,+ infinity和NaN,这可能是各种有趣表达式的结果,如0/0。

查看here了解更多信息。

1

因为你的期望是错误的。

IEEE要求正负零分别表示。

这就是你在这里看到的。