4

C#でDivideByZeroExceptionを防ぐために、人々はしばしば次のようなものを書きます

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

浮動小数点演算には常に不正確さがありますが、この関数がDivideByZeroExceptionをスローしないことが保証されているかどうか疑問に思います。

4

2 に答える 2

8

算術DivideByZeroExceptionを扱っているので、とにかくそれはスローされません-それはただ無限大を返すでしょう。double他の値は無限大を返す場合がありますf(double.Epsilon)

于 2012-02-07T11:49:28.190 に答える
1

ドキュメントには次のように書かれています。

浮動小数点値をゼロで除算すると、IEEE 754演算の規則に従って、正の無限大、負の無限大、またはNot-a-Number(NaN)のいずれかになります。浮動小数点演算が例外をスローすることはありません。詳細については、シングルおよびダブルを参照してください。

そうです、「この関数がDivideByZeroExceptionをスローしないことが保証されています。」-チェックしなくても、正の無限大、負の無限大、またはNot-a-Number(NaN)を返す場合があります。0.0たとえば、かなり大きな値を非常に小さな値で割って結果がを超える場合などです。ダブルでカバーされる範囲。

于 2012-02-07T11:55:43.343 に答える