我看到下面的函数应该返回double d的符号。但是我不明白它是如何工作的?

int sgn(double d){
    return d<-eps?-1:d>eps;
}

最佳答案

return d<-eps?-1:d>eps;

这意味着:
  • 如果d小于-eps,则结果为“负”
  • 如果d大于eps,则结果为“正”(d>eps返回1)
  • 否则返回0(表示数字为“零”)
  • eps通常是一个很小的数字,因此我们将介于-1e-5和1e-5之间的数字视为“实际上为零”。这种方法用于减少计算机浮点数的某些不足,例如sin(pi)!=0。但是,这是以在计算中引入任意数字eps并失去例如属性为代价的。如果ab是正数,则在不发生下溢的情况下a*b是正数。

    关于c++ - C++ Sgn函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4697910/

    10-12 16:26
    查看更多