我不知道,再這樣庫的,也許是因爲它是作爲一個班輪或也許是因爲它被遺忘了一樣簡單......
作爲一般性推移,雖然,你確定你」 d想要在給定的價值下爲給定類型設置一個ε...在整個應用程序中?就我個人而言,我想根據我所做的操作對其進行定製(即使默認設置會很好)。
至於你的運營商,爲什麼不自己設計呢?
template <class T>
bool rough_eq(T lhs, T rhs, T epsilon = Precision<T>::epsilon) // operator==
{
return fabs(lhs - rhs) < epsilon;
}
template <class T>
bool rough_lt(T lhs, T rhs, T epsilon = Precision<T>::epsilon) // operator<
{
return rhs - lhs >= epsilon;
// tricky >= because if the difference is equal to epsilon
// then they are not equal per the rough_eq method
}
template <class T>
bool rough_lte(T lhs, T rhs, T epsilon = Precision<T>::epsilon) // operator<=
{
return rhs - lhs > -epsilon;
}
不平等和大於方法可以從這個平凡的派生。
附加參數意味着您可能希望爲給定的一組計算指定另一個值......應用程序範圍的設置太嚴格。
爲什麼你會使用epsilon比較大或小? – AshleysBrain 2010-05-14 09:47:56
對於浮點型或雙精度型需要比較的唯一時間是等於'=='的比較。對於epsilon,或多或少都沒有任何意義,因爲當他們相等時,你希望得到的答案是什麼?如果更大或更小都是以您提及的方式定義的,那麼在相同的情況下,您將得到一個 b = true和a == b = true,這是不正確的。正確的行爲是,如果a == b,則a> b = false,並且a Akanksh 2010-05-14 09:55:01
@Akanksh,上面的實現可能並不正確,但基於epsilon的不平等對於您突出顯示的場景來說是有意義且重要的。如果兩個數字根據基於epsilon的「==」測試相等,那麼即使第一個數字比第二個數字稍小,也需要一個返回false的<<測試。 – 2010-05-14 10:00:52