是x!=0.0针对DivideByZeroException进行安全检查
本文关键字:DivideByZeroException 安全检查 0针 | 更新日期: 2023-09-27 18:22:46
为了防止C#中出现DivideByZeroException,人们经常编写类似的东西
double f(double x) {
if (x != 0.0) return 1000.0/x;
else return 0.0;
}
考虑到浮点运算总是有不精确性,我想知道是否可以保证这个函数永远不会抛出DivideByZeroException。
它无论如何都不会抛出DivideByZeroException
,因为您正在处理double
算术,它只会返回无穷大。其他值可以返回无穷大,例如f(double.Epsilon)
。
文档中写道:
根据IEEE 754算法的规则,将浮点值除以零将产生正无穷大、负无穷大或无数字(NaN)浮点运算从不引发异常有关详细信息,请参阅Single和Double。
因此,是的,"可以保证这个函数永远不会抛出DivideByZeroException。"-即使没有任何检查,但即使您检查了0.0
,它也可能返回正无穷大、负无穷大或Not-a-Number(NaN),例如,当您将一个相当大的值除以一个非常小的值,结果超过了double所覆盖的范围时。