是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。

是x!=0.0针对DivideByZeroException进行安全检查

它无论如何都不会抛出DivideByZeroException,因为您正在处理double算术,它只会返回无穷大。其他值可以返回无穷大,例如f(double.Epsilon)

文档中写道:

根据IEEE 754算法的规则,将浮点值除以零将产生正无穷大、负无穷大或无数字(NaN)浮点运算从不引发异常有关详细信息,请参阅Single和Double。

因此,是的,"可以保证这个函数永远不会抛出DivideByZeroException。"-即使没有任何检查,但即使您检查了0.0,它也可能返回正无穷大、负无穷大或Not-a-Number(NaN),例如,当您将一个相当大的值除以一个非常小的值,结果超过了double所覆盖的范围时。

相关文章:
  • 没有找到相关文章