所以,我有兩個雙變量,我想比較它們到3位小數。所以,對於變量(例如):比較arduino中的兩個雙變量
double x = 0.695999;
double y = 0.695111;
如果我檢查(X == Y),它應返回true(因爲兩者是平等的,直到3位小數)。謝謝!
所以,我有兩個雙變量,我想比較它們到3位小數。所以,對於變量(例如):比較arduino中的兩個雙變量
double x = 0.695999;
double y = 0.695111;
如果我檢查(X == Y),它應返回true(因爲兩者是平等的,直到3位小數)。謝謝!
你可以(AB)使用整數比較和截斷:
int is_equal_3decplaces(double a, double b) {
long long ai = a * 1000;
long long bi = b * 1000;
return ai == bi;
}
正如@ DavidRF的基準測試表明,它,這個解決方案提供了性能上的輕微(〜40%)的改善相比,計算絕對值。
這是一個有趣的黑客! :) – 2013-03-03 07:57:37
愛它!簡單而有效 – 2013-03-03 09:37:31
@DavidRF Yap,我認爲它可能比調用abs更好,然後比較epsilon(不確定,但 - 運行一些基準會很有趣)。 – 2013-03-03 09:39:07
實際上應該檢查差值是否小於預先配置的小差值,除非您總是希望檢查其小數點後三位。例如:
#define epsilon ((double)0.000999)
bool is_approximately_equal(double x, double y)
{
return (abs(x - y) < epsilon);
}
請注意,C++上的abs具有abs的雙倍版本。在C中,你必須用-ve值做一些事情。
Nah,爲了可讀性,返回abs(x-y)<ε>。 – 2013-03-03 08:00:14
'abs'操作整數不是浮點數 – mttrb 2013-03-03 08:01:07
已更改。謝謝!以爲其他更有啓發性,但反正不會有太大的改變。 – user1952500 2013-03-03 08:01:30
編譯器和我們甚至知道你的意圖是什麼?編譯器/我們不是physic – 2013-03-03 07:55:37
可能是,如果C有一個像這樣的函數:比較(double v1,double v2,int precision)?不是心理,但我們將信息傳遞給方法參數? – 2013-03-03 07:56:58