我看到下面的函数应该返回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)eps
通常是一个很小的数字,因此我们将介于-1e-5和1e-5之间的数字视为“实际上为零”。这种方法用于减少计算机浮点数的某些不足,例如sin(pi)!=0
。但是,这是以在计算中引入任意数字eps
并失去例如属性为代价的。如果a
和b
是正数,则在不发生下溢的情况下a*b
是正数。关于c++ - C++ Sgn函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4697910/