为了在C#中防止DivideByZeroException,人们通常这样写
double f(double x) {
if (x != 0.0) return 1000.0/x;
else return 0.0;
}考虑到浮点算术总是有不精确的事实,我想知道是否可以保证这个函数永远不会抛出DivideByZeroException。
发布于 2012-02-07 19:55:43
documentation说:
根据IEEE754算法的规则,
将浮点值除以零将得到正无穷大、负无穷大或非数字(NaN)。浮点运算从不抛出异常。有关更多信息,请参见Single和Double。
所以,是的,“可以保证这个函数永远不会抛出数字。”-即使没有任何检查,它也可能返回正无穷大,负无穷大,或者不是数字(NaN),即使你检查0.0,例如当你将一个相当大的值除以一个非常小的值,结果超过了double覆盖的范围。
发布于 2012-02-07 19:49:28
它不会抛出DivideByZeroException,因为你正在处理double算术-它只会返回无穷大。其他值可能返回无穷大,例如f(double.Epsilon)。
https://stackoverflow.com/questions/9175692
复制相似问题