Hallo Tom,
Naja, als Tipp kann ich Dir folgendes geben:
-
Du brauchst eine komplette, programmiersprachenunabhängige Spezifikation des Algorithmus (als Beschreibung in Worten, die eindeutig festlegt, was der Algorithmus tun soll). Frag halt den, der den Algorithmus erfunden hat, danach.
-
Du brauchst mehrere korrekte Testcases, sprich: Eingaben und zugehörige Ausgaben. Die kannst Du Dir mit der Spezifikation auch generieren, indem Du die Schritte des Algorithmus manuell durchgehst (was zwar aufwändig ist, dafür hast Du eine unabhängige Kontrolle).
-
Du überprüfst beide Implementierungen (Client, Server) des Algorithmus mit den Testdaten und schaust, was bei rauskommt.
Was mir allerdings auffällt, woran es liegen könnte: Die Funktionen gehen alle davon aus, dass alle Integer-Werte nur 32 bit haben. Betrachte folgenden Beispielcode:
printf ("%016x\n", 0x40000000 << 4);
Auf einem 32bit-System ergibt das:
0000000000000000 (also Null)
Auf einem 64bit-System dagegen:
0000000400000000
Da die bisherige Implementiernug durch das '+' und '-' (also Addition und Subtraktion) aber auch auf 32bit bereits nicht vollkommen korrekt 32bit-artig reagiert (nimmt float-Umwandlungen von PHP bei zu großen Zahlen in Kauf!), wird es EXTREM schwierig das Verhalten der Funktion auf 32bit auf 64 nachzubauen... Wenn das denn tatsächlich die Ursache ist.
Ganz ehrlich: Die Funktion ist Schrott (vmtl. ein 1:1-Port von einer C-Funktion, bei der der Programmierer allerdings keinerlei Eigenheiten von PHP beachtet hat) und Du solltest die Leute dazu überreden, etwas anderes zu verwenden. Denn ich bezweifle, dass Du es ohne zu großen Aufwand hinbekommst, da was richtig hinzukriegen.
Viele Grüße,
Christian