Forum: Object-Pascal / Delphi-Language
by gammatester,
11. Jan 2012
Das mit dem casten verstehe ich nicht. Man hat bei richtiger Implementation von div und mod die Formel A = (A div B)*B + A mod B also A div B = (A - A mod B) div B ohne Rest, aber das könnte die Sache noch verschlimmern, weil dann eventuell ja eine weitere 0 weggeshiftet wird. Ansonsten ist hier ein Fix ohne Garantie für die Original-Routine. Die Anzahl der R-Stellen wird vorher berechet und...
Forum: Object-Pascal / Delphi-Language
by gammatester,
11. Jan 2012
Deine neuen Routinen haben noch einen schweren Fehler, denn sie arbeiten nur richtig für positive Integer, zB ergibt 16 div (-3) den Wert 251! Außerdem kann man sie noch drastisch vereinfachen (wenn Du nicht gleich ein kombiniertes div-mod berechnen willst), zB
function HugeIntDivCard(A: HugeInt; B: cardinal): HugeInt;
var
I: integer;
R: cardinal;
begin
R:= 0;
FillChar(Result,...
Forum: Object-Pascal / Delphi-Language
by gammatester,
10. Jan 2012
Es ist noch viel schlimmer: 65536 / 1 wird zu 1 berechnet, 50331648 div 3 = 1, etc. Offensichtlich werden alle wertniedrigen 0-Bytes weggeshiftet und nicht nur eins. Aber ich denke, es lohnt nicht den Code weiter zu verfolgen, da offensichtlich wenig durchdacht. ZB kann der OOps-Zweig nie erreicht werden, da A - D nicht negativ sein kann, wenn A >= D ist. Wenn Du eine MP-Bibliothek brauchst,...