4

为了防止 C# 中的 DivideByZeroException,人们经常编写类似的东西

double f(double x) {
  if (x != 0.0) return 1000.0/x;
  else return 0.0;
}

考虑到浮点运算总是不精确的事实,我想知道是否可以保证这个函数永远不会抛出 DivideByZeroException。

4

2 回答 2

8

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

于 2012-02-07T11:49:28.190 回答
1

文档说:

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

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

于 2012-02-07T11:55:43.343 回答