我如何在计算中避免-0.0

How can i avoid -0.0 in computation

本文关键字:计算      更新时间:2023-10-16

两个双值。

    double a=-324.000000
    double b= 0.000000
if(a*b<0)
{
//number is less than 0
 }
else
{
//number is greater than zero
}

它总是以"小于零的数字"的形式输出。当我将两者相乘时,得到的结果为"-0.000000"。但是,结果应该是0.000000。

这不是我得到的结果。你确定问题不在别的地方吗?

你在评论中说"我试过if(a==0.0){/*but it never enters here!!*/ }。"看起来这个数字实际上并不是0。

考虑以下代码:

#include<iostream>
int main() {
  double a=-324;
  double b= 0;
  double c = a * b;
  std::cout<<std::boolalpha
           <<"a     : "<<a<<std::endl
           <<"b     : "<<b<<std::endl
           <<"c     : "<<c<<std::endl
           <<"c < 0 : "<<(c < 0)<<std::endl
           <<"c > 0 : "<<(c > 0)<<std::endl
           <<"c == 0: "<<(c == 0)<<std::endl
      ;
}

带输出:

a     : -324
b     : 0
c     : -0
c < 0 : false
c > 0 : false
c == 0: true

根据IEEE浮点运算标准(也称为IEEE 754):

比较应忽略零符号(因此+0=-0)

(引用第5.11节)

你的问题在其他地方。

是的,可以生成值-0.0。它的比较值等于正0.0,因此您可以执行以下操作:

double c = a * b;
if (c == 0.0)
    c = 0.0;

实际上,我已经在VisualStudio中使用了这段代码来修复一个格式错误。一定要彻底地评论,这样人们就不会认为你疯了。