1
Q
浮點等價?
A
回答
6
閾值完全依賴於問題本身。對於某些問題,您可能會認爲1.001等於1.002,對於某些問題,您可能需要更小的閾值。
一般己技巧是:
Math.Abs(a - b) < some_epsilon // `a` is roughly equivalent to `b`
3
一個很不錯的,這徹底的方法是:
public static bool DoubleEquality(double a, double b)
{
const double epsilonValue = 1e-15;
if (double.IsNaN(a))
return double.IsNaN(b);
else if (double.IsInfinity(a))
return double.IsInfinity(b);
else if (a == 0)
return b == 0;
else
return Math.Abs(a - b) <= Math.Abs(a * epsilonValue);
}
注意Double.Epsilon是不是一個很好的小量值。這會創建一個隨着您的第一個值的大小而略微增加的epsilon,這會有所幫助。
相關問題
- 1. 是Python的==一個浮點數上的等價關係嗎?
- 2. Perl中浮點等價的單元測試
- 3. 浮點數是否等價於_mm_slli_si128(__ m128i a,int num)?
- 4. 浮點值等於-1。#IND
- 5. Python浮點等於奇怪
- 6. 測試浮點相等。 (FE_FLOATING_POINT_EQUALITY)
- 7. 浮點相等和不等式
- 8. 浮點或小數的價格?
- 9. 問題與浮點乘法和評價
- 10. 除法後乘以浮點不等於
- 11. 浮點數的意外結果等於
- 12. 用戶輸入的浮點數相等
- 13. MPFR C++打印整數等浮點數
- 14. 節點js中的RSAPKCS1SignatureDeformatter等價物
- 15. 在四邊形中找到等價點
- 16. .NET等價於節點http代理
- 17. $ .ajax調用節點js是否等價?
- 18. 節點JS中芹菜的等價物
- 19. 減去MATLAB兩個相等的浮點數字不等於0
- 20. IL Callvirt等價?
- 21. SWI Prolog等價
- 22. 等價設置
- 23. 等價於BN_hex2bn
- 24. 等價於getbounds
- 25. 等價的.send()
- 26. 等價類LISP
- 27. 表示等價
- 28. 浮點
- 29. XSLT:用其他文檔的等價節點替換節點
- 30. 方案語言中少點少點的等價物?
這很好,但爲some_epsilon選擇一個合理的值是棘手的。 – 2009-07-29 20:52:46
確實很棘手;並沒有一般的建議。就我個人而言,我在ACM/ICPC幾何問題以及那些需要在解決方案空間進行二進制搜索的問題中經歷過它的詭計。 – 2009-07-29 20:56:50