定义平方根的条件

来吧我老婆

该宏用于计算sqrt(x)

#define SQRT(x)     ((x)<=0.0||(x)!=(x)?0.0:sqrt(x))

我不明白在哪种情况下第二个条件(x)!=(x)可能是正确的?

安蒂·哈帕拉(Antti Haapala)

(x) != (x)如果xIEEE 754非数字(NaN),则为true 也就是说,对于未定义平方根的参数值,此宏尝试将结果强制为0.0。开方(3)Linux手册页总结了很好的返回值:

返回值

成功后,这些函数将返回x的平方根。

  • 如果x为NaN,则返回NaN。

  • 如果x为+0(-0),则返回+0(-0)。

  • 如果x为正无穷大,则返回正无穷大。

  • 如果x小于-0,则发生域错误,并返回NaN。

因此,此表达式可确保在第一种情况和第四种情况下将返回NaN而不是0,并且errno将其保持不变,并且不会发生浮点异常。


(顺便说一句,如果您在宏参数中有副作用,那么使用此奇怪的宏并不安全,因此最好用内联函数或类似函数代替)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章