Fließkommazahlen und AND-Operator bei PHP5
am 20.01.2005 23:22:57 von rkhbngHallo,
ich bereite ein fremdes PHP4-Programm für PHP5 auf und bin auf ein seltsames
Problem gestoßen. Folgender Beispielscode:
$a = 1000000000000000;
$b = 65535;
$and = $a & $b;
echo '$and = ',$and,'
';
liefert bei meinem WAMP mit PHP 4.3.10 das gewünschte Ergebnis $and=32768. Bei
WAMP-PHP 5.0.2 ist das Ergebnis $and=65535, was eigentlich nur bedeuten kann,
dass man die Finger von Bit-Operatoren bei Double-Variablen lassen soll. Nun
folgt das Seltsame: ich habe den Code auf das LAMP-System (PHP 5.0.3) des
Providers hochgeladen und siehe da: $and=32768.
Zum Nachrechnen:
1000000000000000d = 038d7ea4c68000h
AND
65535d = 0000000000FFFFh
=
32768d = 00000000008000h
Mein PHP5 liefert keinen Fehler oder Warnung. Übrigens gibt es auch mit jedem
anderen Wert von $b (es wird jeweils der Wert von $b zurückgegeben - maximal
2147483647) und beim Austausch von $a und $b ein falsches Ergebnis.
Ich möchte (noch) nicht eine bis jetzt unbekannte Vielzahl von Funktionen
umprogrammieren, zumal da es auf dem Zielsystem ja funktioniert. Meine eigenen
Programme haben diese Probleme nicht, da ich nie auf die Idee kommen würde, eine
Fließkommazahl bitweise manipulieren zu wollen, aber dies ist eben ein fremdes
(umfangreiches) Programm, und ich habe noch keinen genauen Überblick, in welchen
verborgenen Winkeln sich derartige Operationen verstecken.
Ist das beschriebene Verhalten bekannt? Gibt es eine Möglichkeit, meinem
Windows-PHP auch ein korrektes Bit-Verhalten von Fließkommazahlen - im Rahmen
der Genauigkeit von Fließkommazahlen natürlich - beizubringen? Vielen Dank
schon einmal für hilfreiche Hinweise!
viele grüße
ralph