#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
为什么这段优秀的代码输出-0
而不是0
,正如人们所期望的那样?
答案 0 :(得分:13)
浮点数的IEEE 754标准的符号位与尾数分开,允许零为负。 Wikipedia应该能够帮助解释这一点。
答案 1 :(得分:2)
在IEEE浮点0
和-0
都是不同的值,来自“特殊值”下的here:
请注意,-0和+0是不同的 价值,虽然他们都比较为 相等。
答案 2 :(得分:2)
用于浮点运算的IEEE 754标准对+0
和-0
进行了区分,这可以在处理符号仍具有重要性的四舍五入到零的非常小的数字时使用。
答案 3 :(得分:1)
因为“负零”是有效数字!
答案 4 :(得分:1)
看一下这篇文章:http://en.wikipedia.org/wiki/Floating_point。请注意,即使值为零,也会有一个符号位。
答案 5 :(得分:1)
因为double确实可以具有值-0,+ 0,-infinity,+ infinity和NaN,这可能是各种有趣表达式的结果,如0/0。
查看here了解更多信息。
答案 6 :(得分:1)
因为你的期望是错误的。
IEEE要求正零和负零分别表示。
这就是你在这里看到的。