如果我想检查正浮点 A 是否小于另一个正浮点 B 的平方反比(在 C99 中),如果 B 非常小,会出现问题吗?
我可以想象检查它像
if(A<1/(B*B))
但是如果 B 足够小,这可能会导致无穷大吗?如果发生这种情况,代码是否仍能在所有情况下正常工作?
以类似的方式,我可能会这样做
if(1/A>B*B)
...这可能会稍微好一些,因为如果 B 很小, B*B 可能为零(这是真的吗?)
最后,我无法想象是错误的解决方案是
if(sqrt(1/A)>B)
我认为这不会导致零除法,但如果 A 接近于零,仍然可能会出现问题。
所以基本上,我的问题是:
- 如果 X 大于零(但很小),那么 1/X 是否可以无穷大?
- 如果 X 大于零,X*X 可以为零吗?
- 与无穷大的比较会按照我期望的方式进行吗?
编辑:对于那些想知道的人,我最终做了
if(B*A*B<1)
我是按这个顺序做的,因为它在视觉上是明确的,哪个乘法首先发生。