x!= 0.0是对DivideByZeroException的安全检查吗?

时间:2012-02-07 11:47:08

标签: c# divide-by-zero

为了防止C#中的DivideByZeroException,人们经常会写出像

这样的东西
double f(double x) {
  if (x != 0.0) return 1000.0/x;
  else return 0.0;
}

鉴于浮点运算始终具有不精确性,我想知道是否保证此函数不会抛出DivideByZeroException。

2 个答案:

答案 0 :(得分:8)

无论如何,当你正在处理DivideByZeroException算术时,它不会抛出double - 它只会返回无穷大。其他值可能返回无穷大,例如f(double.Epsilon)

答案 1 :(得分:1)

documentation说:

  

根据IEEE 754算法的规则,将浮点值除以零将导致正无穷大,负无穷大或非数字(NaN)。 浮点运算从不抛出异常。有关详细信息,请参阅单值和双精度。

是的,“确保此函数不会抛出DivideByZeroException。” - 即使没有任何检查,但即使你检查0.0,它也可能返回正无穷大,负无穷大或非数字(NaN),例如当你将一个相当大的值除以一个非常小的值时这样结果就超出了double所涵盖的范围。