C++ Sgn函数

1 c++

我看到下面的函数应该返回双d的符号.但我无法理解它是如何工作的?

int sgn(double d){ 
    return d<-eps?-1:d>eps;
}
Run Code Online (Sandbox Code Playgroud)

jpa*_*cek 7

return d<-eps?-1:d>eps;
Run Code Online (Sandbox Code Playgroud)

这意味着:

  • 如果d小于-eps,则结果为"否定"
  • 如果d超过eps,则结果为"正"(d>eps返回1)
  • 否则我们返回0(表示数字为"零")

eps通常是一个小数字,所以我们认为-1e-5和1e-5之间的数字为"几乎为零".这种方法用于淡化计算机浮点数的一些缺陷,就像那样sin(pi)!=0.然而,它的代价是在计算中引入任意数字eps,并失去例如的属性.如果ab为正数,a*b为正提供溢不会发生.