So, ich habe schon wieder umdisponiert, bin wohl etwas flatterhaft:
Delphi-Quellcode:
const
MaxDigits = 1039;
// (2^32)^1040 = 1,89782E10018 => 10.000 dezi Stellen o.K.
type
TVLInt =
packed record
strict private
Digits:
array[0..MaxDigits]
of Cardinal;
IsNegative: Boolean;
Length: Integer;
...
public
class operator Implicit(
const a: Cardinal): TVLInt;
...
implementation
class operator TVLInt.Implicit(
const a: Cardinal): TVLInt;
asm
// eax <= a
mov [edx], eax
mov edx.IsNegative, 0
xor ecx, ecx
test eax, eax
// ZF if eax = 0
jz @@IsZero
add ecx, 1
@@IsZero:
mov edx.Length, ecx
// edx = @Result
end;
So läßt es sich leicht rechnen und ich muß mir keine Gedanken um Speicherlecks u. ä. machen. 10.000 dez Ziffern sind für alle meine Anwendungen mhr als genug. Den übertriebenen Speicherverbrauch werde ich wohl verschmerzen.
Gruß Talia