#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
为什么这个伟大的代码输出-0
而不是0
像人们期望的那样?
#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
为什么这个伟大的代码输出-0
而不是0
像人们期望的那样?
浮点数的 IEEE 754 标准将符号位与尾数分开,这允许零为负数。 维基百科应该能够帮助解释这一点。
在 IEEE 浮点中0
,并且-0
都是不同的值,从这里的“特殊值”下:
请注意,-0 和 +0 是不同的值,尽管它们比较相等。
+0
浮点算术的 IEEE 754 标准对和进行了区分-0
,这可以用于处理四舍五入到零的非常小的数字,而符号仍然很重要。
因为“负零”是一个有效数字!
看看这篇文章:http ://en.wikipedia.org/wiki/Floating_point 。请注意,即使值为零,也有符号位。
因为 double 确实可以具有值 -0、+0、-infinity、+infinity 和 NaN,这可能是各种有趣表达式的结果,例如 0/0。
在这里查看更多信息。
因为你的期望是错误的。
IEEE 要求分别表示正零和负零。
这就是你在这里看到的。