Einzelnen Beitrag anzeigen

DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#9

Re: floats auf Null prüfen (C++)

  Alt 4. Apr 2008, 19:07
Zitat von SnuffMaster23:
Entweder (x<e || x>-e) oder ((x&0x7FFFFFFF)<e).
Letzteres ist mit C++ syntaktisch so nicht möglich, da für Gleitkommatypen keine Bitoperatoren exisiteren. Da Gleitkommazahlen aber genormt sind, braucht dich das nicht daran zu hindern, es trotzdem so zu machen:
Code:
inline bool isNull (float val, float e = 0.00001f)
{
    *reinterpret_cast <int*> (&val) &= 0x7FFFFFFF;
    return (val < e);
}
inline bool isNull (double val, double e = 0.000000001)
{
    *reinterpret_cast <long long*> (&val) &= 0x7FFFFFFFFFFFFFFFul;
    return (val < e);
}
Für vorzeichenbehaftete Integerwerte funktioniert deine Vergleichsmethode übrigens auch nicht, da diese anders dargestellt werden, als du annimmst; hier am Beispiel einer 1-Byte-Zahl:
http://img138.imageshack.us/img138/9...gnedintml7.gif
Aus diesem Grund ist ~0 (der unäre Operator ~ in C negiert den Parameter bitweise) gleichwertig mit -1, unabhängig davon, wie breit der Datentyp ist.
Moritz
  Mit Zitat antworten Zitat