000
07.07.2006, 14:57 Uhr
(un)wissender
Niveauwart
|
Man sagt ja, dass man Flieskommazahlen nicht mit == vergleichen soll. Nun fällt es mir mit dem gcc aber schwer ein Beispiel zu finden, wo der Vergleich mit == wirklich ein falsches Ergebnis liefert. Kennt jemand eins?
Ansonsten habe ich mal das hier geschrieben, dass den Vergleich von Flieskommazahlen ermöglichen soll.
C++: |
#include <limits> #include <cmath>
namespace fl { template<typename T> bool eq(T first, T second, T epsilon = std::numeric_limits<T>::epsilon()) { return std::abs(first - second) < epsilon; } template<typename T> bool neq(T first, T second, T epsilon = std::numeric_limits<T>::epsilon()) { return !eq(first, second, epsilon); } template<typename T> bool le(T first, T second, T epsilon = std::numeric_limits<T>::epsilon()) { return neq(first, second, epsilon) && first < second; }
template<typename T> bool gr (T first, T second, T epsilon = std::numeric_limits<T>::epsilon()) { return neq(first, second, epsilon) && first > second; }
template<typename T> bool eqLe (T first, T second, T epsilon = std::numeric_limits<T>::epsilon()) { return eq(first, second, epsilon) || first < second; } template<typename T> bool eqGr(T first, T second, T epsilon = std::numeric_limits<T>::epsilon()) { return eq(first, second, epsilon) || first > second; } }
|
-- Wer früher stirbt ist länger tot. |