如何摆脱签名零的减号

rat*_*eer 5 c c++ floating-point

我用asin来计算角度.代码如下:

double FindAngle(const double theValue)
{
     return asin(theValue);
}
Run Code Online (Sandbox Code Playgroud)

当参数theValue = -0.0时,FindAngle返回-0.0(有符号零).现在,我如何摆脱返回值的减号.

Fac*_*doJ 8

您可以执行以下操作:

double FindAngle(const double theValue)
{
     return (asin(theValue) + 0.0);
}
Run Code Online (Sandbox Code Playgroud)

我有同样的问题,这对我有用.


ken*_*ytm 6

如果您只想将-0转换为0并保持其他未触及,请进行比较.

double FindAngle(double value) {
    double res = asin(value);
    if (res == 0.0) res = 0.0;
    return res;
}
Run Code Online (Sandbox Code Playgroud)

  • 它适用于这种情况.我相信提问者只想将`-0.0`转换为`0.0`,而不是`[-epsilon,0]`中的浮点范围.只有一个`-0.0`,唯一的值`== 0.0`是`-0.0`和`0.0`,所以可以使用`==`. (14认同)
  • @MadH:绝对不是"明白错误".在这种情况下,使用阈值的任何比较都是不正确的. (7认同)
  • @ratnaveer,@ MadH:使用`=='或`!=`比较浮点值绝对没有错误*假设这是需要的.在这种特殊情况下,在问题的形式解释下(即当我们需要将`-0`转换为'0`)时,它是完全合适的. (4认同)
  • 我不认为使用"=="比较两个双打将始终有效 (2认同)

Mat*_*len 2

如果您希望所有结果均为正值,请在返回值上包含<cmath>并使用该abs函数,或者检查您的返回值是否等于 -0.0 并获取abs它的值(对于这种情况)。

abs 函数(C++ 参考)