15. december 2003 - 19:37Der er
13 kommentarer og 1 løsning
Operere med meget store tal?
Jeg har brug for at operere med meget store tal (op til 200 cifre). Hvilken real-type skal jeg bruge og endnu vigtigere hvordan bruger jeg f.eks. real48 i praksis?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
begin res := ''; carry := 0; ix1 := length(v1); ix2 := length(v2); while (carry > 0) or (ix1 > 0) or (ix2 > 0) do begin tmp := carry; if(ix1 > 0) then begin tmp := tmp + numval(v1[ix1]); ix1 := ix1 - 1; end; if(ix2 > 0) then begin tmp := tmp + numval(v2[ix2]); ix2 := ix2 - 1; end; res := strval(tmp mod 10) + res; carry := tmp div 10; end; add := res; end;
function mulpow10(v : string; pow10 : integer) : string;
var res : string; i : integer;
begin res := v; for i := 1 to pow10 do begin res := res + '0'; end; mulpow10 := res; end;
function mulone(v : string; num : integer) : string;
var res : string; ix, tmp, carry : integer;
begin res := ''; carry := 0; ix := length(v); while (carry > 0) or (ix > 0) do begin tmp := carry; if(ix > 0) then begin tmp := tmp + num * numval(v[ix]); ix := ix - 1; end; res := strval(tmp mod 10) + res; carry := tmp div 10; end; mulone := res; end;
function mul(v1,v2 : string) : string;
var res : string; i : integer;
begin res := '0'; for i := 1 to length(v2) do begin res := add(res,mulpow10(mulone(v1,numval(v2[i])),length(v2)-i)); end; mul := res; end;
var i : integer; fac : string;
begin (* functionality test *) writeln(add('1234','12345678')); writeln(mulpow10('123',2)); writeln(mulone('123456',2)); writeln(mul('12345','12345')); (* performance test *) fac := '1'; for i := 1 to 500 do begin fac := mul(fac, inttostr(i)); writeln(i,' ',fac); end; end.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.