Fließkommazahlen und AND-Operator bei PHP5

Fließkommazahlen und AND-Operator bei PHP5

am 20.01.2005 23:22:57 von rkhbng

Hallo,

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

Re: Fließkommazahlen und AND-Operator bei PHP5

am 21.01.2005 18:30:02 von rkhbng

Ralph 'rkhb' Bauer schrieb:
> 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?

Nach Aufspielen der neuesten Windows-Binaries (5.0.3) ist das Verhalten wieder
"normal". Es scheint sich also um einen bekannten Bug (bzw. Feature) gehandelt
zu haben.

viele grüße
ralph