Du weißt aber, daß du so über 'nen Extended gehst/rechnest und damit unter Umständen die letze (9.) Kommastelle einbüßt.
In welchem Bereich liegen denn deine Werte?
Wenn die im Bereich -9,223372036854775808 .. 9,223372036854775807 liegen, dann könnte man einfach:
Delphi-Quellcode:
class operator FIXCOMMA64.Multiply(const Left, Right: FIXCOMMA64): FIXCOMMA64;
var val: extended;
begin
Result.FBCD9 := (Left.FBCD9 * Right.FBCD9 + (FBCD9INT div 2)) div FBCD9INT;
end;
.FBCD9 ist och ein Int64?
Bei größerem Wertebereich müßte am den Überlauf abfangen, also sozusagen die Multiplikation mit 128 Bit-Integern berechnen, bzw. die Berechnung auf 2 64-Bit oder besser noch auf
4 (vier) 3 32-Bit-Integer (für 32-Bit-CPUs) zerlegen.
praktisch so, wie es Delphi schon beim Int64 macht ... nur größer
Ein Therapeut entspricht 1024 Gigapeut.