af0815 hat geschrieben:Da die sich ergebende Länge bei einer Multiplikation, maximal die Summe der Längen ergeben kann, sollte es so korrigiert werden.
Halte ich für keine so gute Idee. nach "Aussen" wird immer die Karazuba-Multiplikation exportiert. Innen teilt sie die Arbeit (wenn ich das richtig sehe) in Multiplikationen mit gleich langen Faktoren auf.
Ich habe den Code nicht mit unterschiedlich langen Faktoren getestet. Ich sehe allerdings nicht, warum das nicht gehen sollte (Der ASM-Teil merkt davon ja nix).
Der obige Code ist allerdings ziemlich falsch.
So könnte es gehen:
Code: Alles auswählen
function GNZMul(p1, p2: GNZType): GNZType;
var
l1, l2, i: Integer;
begin
l1 := length(p1);
l2 := length(p2);
setlength(Result, l1+l2);
for i := 0 to l1+l2-1 do begin
Result[i] := 0;
end;
for i := 0 to l2 - 1 do begin
GNZMulInternal(Result[i], p1[0], p2[i], l1);
end;
end;
-Michael