提问人:Leonid 提问时间:9/16/2008 最后编辑:LogicStuffLeonid 更新时间:12/22/2015 访问量:1416
cout 打印“-0”而不是“0”
cout prints "-0" instead of "0"
问:
#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
为什么这一段伟大的代码会输出,而不是像人们所期望的那样?-0
0
答:
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要求正零和负零分开表示。
这就是你在这里看到的。
评论
using namespace std;