繁体   English   中英

定义平方根的条件

[英]define condition for square root

这个宏用于计算sqrt(x)

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

我无法理解在哪种情况下第二个条件(x)!=(x)可能是真的吗?

(x) != (x)如果xIEEE 754非数字(NaN),则为真。 即,此宏尝试将结果强制为0.0,以获取未定义平方根的参数值。 sqrt(3)Linux手册页很好地总结了返回值:

返回值

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

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

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

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

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

因此,此表达式确保代替NaN,将为第1和第4个案例返回0,此外, errno不会被触及,并且不会发生浮点异常。


(顺便说一句,如果你在宏参数中有副作用,这个奇怪的宏是不安全的,所以最好用内联函数或类似函数替换)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM