我想比較2 雙打落在[0.0,1.0]。如何比較雙精度5位數?
我的功能(從https://stackoverflow.com/a/17341拍攝) -
inline bool isEqual(double x, double y)
{
const double epsilon = 0.000001;
return fabs(x - y) < epsilon;
}
用途區內─
cerr << isEqual(1.000001, 1.000002) << endl;
cerr << isEqual(1.000010, 1.000020) << endl;
是 -
0
0
輸出而我第一次希望是true
,第二次是false
。請告訴我我要去哪裏以及如何解決問題?
你總是會得到浮點錯誤。即使精確度很高,「晶圓廠(1.000001 - 1.000002)」將等於「0.000001」,並非嚴格低於此值。 –
該函數名稱錯誤。它不**測試平等,應該被稱爲'almost_equals'或沿着這條線。 –