cout打印" -0"而不是" 0"

时间:2020-03-05 18:56:20  来源:igfitidea点击:
#include <iostream>
using namespace std;

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

为什么这段很棒的代码会输出" -0"而不是" 0",就像人们期望的那样?

解决方案

回答

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

回答

因为"负零"是有效数字!

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

回答

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

回答

在IEEE浮点中," 0"和" -0"都是不同的值,在此处的"特殊值"下:

Note that -0 and +0 are distinct
  values, though they both compare as
  equal.

回答

IEEE 754浮点算法的标准在" +0"和" -0"之间进行了区分,当处理非常小的数舍入为零(其中符号仍然很重要)时,可以使用此标准。

回答

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

在这里查看更多信息。

回答

因为期望是错误的。

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

那就是你在这里看到的。