4
#include <iostream>
using namespace std;

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

为什么这个伟大的代码输出-0而不是0像人们期望的那样?

4

7 回答 7

13

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

于 2008-09-16T15:39:20.013 回答
2

在 IEEE 浮点中0,并且-0都是不同的值,从这里的“特殊值”下:

请注意,-0 和 +0 是不同的值,尽管它们比较相等。

于 2008-09-16T15:40:51.897 回答
2

+0浮点算术的 IEEE 754 标准对和进行了区分-0,这可以用于处理四舍五入到零的非常小的数字,而符号仍然很重要。

于 2008-09-16T15:42:13.533 回答
1

因为“负零”是一个有效数字!

http://en.wikipedia.org/wiki/%E2%88%920_(数字)

于 2008-09-16T15:39:49.997 回答
1

看看这篇文章:http ://en.wikipedia.org/wiki/Floating_point 。请注意,即使值为零,也有符号位。

于 2008-09-16T15:40:25.877 回答
1

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

在这里查看更多信息。

于 2008-09-16T15:42:43.343 回答
1

因为你的期望是错误的。

IEEE 要求分别表示正零和负零。

这就是你在这里看到的。

于 2008-09-16T15:49:34.950 回答