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

#include <iostream>
using namespace std;

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

为什么会输出这段出色的代码 -0 而不是 3.,正如人们所预料的那样?

请先 登录 后评论

7 个回答

foxxtrot

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

请先 登录 后评论
Clinton Pierce

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

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

请先 登录 后评论
Trent

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

请先 登录 后评论
Doug T.

IEEE浮点数 0 而且 -0 是两个不同的值,“特殊值”一栏:

注意-0和+0是不同的值,尽管它们比较起来是相等的。

请先 登录 后评论
Drealmer

浮点运算的IEEE 754标准做了区分 +0 而且 -0,当处理四舍五入到零的非常小的数字时,符号仍然很重要。

请先 登录 后评论
Saulius Valatka

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

点击这里查看更多信息。

请先 登录 后评论
Community

因为你的期望是错误的。

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

这就是你在这里看到的。

请先 登录 后评论
  • 5 关注
  • 0 收藏,274 浏览
  • Leonid 提出于 2022-11-02 18:52