浮點比較中的Double.Epsilon
問題:
答案: Epsilon 值表示最小的可表示非- 除 0 以外的非正規浮點值。雖然在比較中它似乎是 epsilon 的自然候選者,但它不夠精確目的。 Double.Epsilon 反映了最小的可表示截斷誤差,但它根據所比較的數字的大小而變化很大。例如,對於兩個接近 1 的數字,Double.Epsilon 可能是 0.0000000000000002220446,而對於兩個接近 1,000,000,000,000,000 的數字,它可能是 222,044,604,925,093,800。這表示依賴 Double.Epsilon 進行相等或其他比較不會提供一致的結果。 相等的替代 Epsilon 估計: 比較浮動的一種建議方法 -相等的點值是使用常數 * 1E-15 的 epsilon。這近似表示 Double 類型可以精確地表示 15 位元數字的值。例如: 比較運算子: 雖然Double.Epsilon不能直接用於比較,但AboutEqual方法可以適配大於、小於、小於或等於、大於或等於: 其他注意事項:public static bool AboutEqual(double x, double y) {
double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
return Math.Abs(x - y) <= epsilon;
}
以上是我應該使用 Double.Epsilon 進行浮點比較嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!