【问题标题】:How the answer is -0?答案是-0?
【发布时间】:2020-09-01 10:00:55
【问题描述】:

如果我的问题不正确,请忘记我。我是 C++ 的初学者。 我刚刚用c++写了一个简单的程序 我的代码是:

#include<iostream>
using namespace std;
int main()
{
    float a,b,c;
    a=0;
    b=-5;
    c=a/b;
    cout<<c;

}

当我运行此代码时,输​​出为 -0。 答案怎么可能是 -0 而 -0 不存在?

【问题讨论】:

  • 在浮点数中,有一个位用于指示数字的符号。根据您的计算方式,即使答案为0,也可以设置。
  • 谁告诉你信息学中没有零负数?
  • 不是一个重复的问题,但确实存在 -0 的一个示例:stackoverflow.com/questions/45795397/…
  • 作为程序员,您学到的一件事是数字的计算机表示仅近似于数字是什么的数学概念。在计算中-0.0确实存在。

标签: c++ floating-point


【解决方案1】:

答案怎么可能是 -0 而 -0 不存在?

你的假设是错误的。 -0 确实存在于浮点数表示中,因此答案可能是 -0。

有关参考,请参阅 IEEE-754 标准,有关“为什么”,请参阅Branch Cuts for Complex Elementary Functions or Much Ado About Nothing's Sign Bit

【讨论】:

    【解决方案2】:

    背后有一个简单的逻辑:
    假设您要将另一个数字除以 -5,例如 2。
    因此,如果您将 2 除以 -5,首先它将 2 除以 5,然后将 - 符号应用于结果。
    使用 0 而不是 2 时的逻辑相同。因此 0/5 = 0,并应用 - 符号,使其变为 -0。

    附:正如其他人已经在 cmets 中提到的那样,-0 does exist 在浮动宇宙中。
    附言通过说“应用 - 符号”,我的意思是它只是将浮点数中的第一位(也称为“符号位”)设置为 1。

    有关浮动结构的更多信息,请参阅here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多