以this問題爲基礎,衆所周知,我們不應將等於比較運算應用於小數變量,由於數字錯誤(它不受編程語言限制):是圓形正確的方式進行浮點雙比較
bool CompareDoubles1 (double A, double B)
{
return A == B;
}
它是不正確的代碼。 我的問題是:
- 這是正確的兩個數字,然後比較?
- 它更有效率?
例如:
bool CompareDoubles1 (double A, double B)
{
double a = round(A,4);
double b = round(B,4)
return a == b;
}
這是正確的?
編輯
我考慮輪是採取雙重(數字)的方法和INT(precition):我認爲
bool round (float number, int precision);
編輯 是更好的主意我用這個比較方法表示的意思是:
bool CompareDoubles1 (double A, double B, int precision)
{
//precition could be the error expected when rounding
double a = round(A,precision);
double b = round(B,precision)
return a == b;
}
'round'的定義是什麼? – Erbureth
比較浮點數的正確方法不是完全比較它們。 – Griwes
第一個代碼是_is_正確的,即使比較很少是真的。如果要按位平等,則需要使用第一個代碼。關於使用「信任區域」或任何其他名稱的觀點是,在大多數情況下,您並不是指按位平等,而是「這兩個數字在某種精度下是否相同?」 – stefan