爲了防止DivideByZeroException在C#中,人們經常寫東西像x!= 0.0是否對DivideByZeroException進行安全檢查?
double f(double x) {
if (x != 0.0) return 1000.0/x;
else return 0.0;
}
鑑於浮點運算總是有不精確的,我不知道它是否保證該功能不會拋出一個DivideByZeroException。
爲了防止DivideByZeroException在C#中,人們經常寫東西像x!= 0.0是否對DivideByZeroException進行安全檢查?
double f(double x) {
if (x != 0.0) return 1000.0/x;
else return 0.0;
}
鑑於浮點運算總是有不精確的,我不知道它是否保證該功能不會拋出一個DivideByZeroException。
被零除浮點值將導致在任一正無窮大,負無窮大,或根據IEEE 754算法的規則不-一個數字(NaN)。 浮點運算不會拋出異常。有關更多信息,請參見單和雙。
所以是的,「這是保證此函數不會拋出DivideByZeroException。」 - 即使沒有進行任何檢查,即使您檢查了0.0
,它可能會返回正無限,負無窮或非數字(NaN),例如,當您將相當大的值除以非常小的值時,超出雙倍範圍。
無論如何它不會拋出一個DivideByZeroException
,因爲你正在處理double
算術 - 它只會返回無窮大。其他值可能會返回無窮大,例如f(double.Epsilon)
。
難道它不會返回double.NaN? – Dervall 2012-02-07 11:53:02
@Dervall - 不,http://kossovsky.net/index.php/2010/04/division-by-zero-is-simple-but-the-result-not/ – 2012-02-07 11:54:19
NaN會被0潛水0 – 2012-02-07 11:54:29
爲什麼不抓住DivideByZeroException並在catch中返回0.0? – 2012-02-07 11:50:22
嗯,不,故意產生垃圾計算結果是非常不明智的。你會想* throw *一個DBZE,測試double.IsInfinity的結果。 – 2012-02-07 11:59:55