cout 打印“-0”而不是“0”

cout prints "-0" instead of "0"

提问人:Leonid 提问时间:9/16/2008 最后编辑:LogicStuffLeonid 更新时间:12/22/2015 访问量:1416

问:

#include <iostream>
using namespace std;

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

为什么这一段伟大的代码会输出,而不是像人们所期望的那样?-00

C++ 浮点

评论

0赞 Jean 9/16/2008
更多的上下文将不胜感激(例如用于启动的编译器)
0赞 Billy ONeal 10/31/2010
伟大的 C++ 代码不能有 .using namespace std;

答:

13赞 foxxtrot 9/16/2008 #1

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

1赞 Clinton Pierce 9/16/2008 #2

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

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

1赞 Trent 9/16/2008 #3

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

2赞 Doug T. 9/16/2008 #4

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

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

2赞 Drealmer 9/16/2008 #5

IEEE 754 浮点运算标准区分了 和 ,这可用于处理四舍五入为零的非常小的数字,其中符号仍然很重要。+0-0

1赞 Saulius Valatka 9/16/2008 #6

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

查看此处以获取更多信息。

1赞 Wiggly 9/16/2008 #7

因为你的期望是错误的。

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

这就是你在这里看到的。