home *** CD-ROM | disk | FTP | other *** search
- Program Roots; { find a root of a number }
- {precision set at 36 digits }
-
- uses vlncls;
-
- const precision = 20;
- mSize = 30;
-
- var dummy : tWordArray; { dummy }
- i, j ,
- CountMax,StdVLNSize : integer;
- a, b, c, d : pVryLrgNo;
- matrix1 : array[1.. mSize,1.. mSize] of pVryLrgNo;
-
- begin
- { wksize is initialized to 100 words of storage }
- { but we make it larger or smaller before any memory is allocated }
- Setwksize(precision*4);
- OpenTempRegs;
- { standard subs need temp storage }
- { their max count is wksize }
- { their needed storage is wksize*2+6 }
-
- CountMax := precision; { set count to anyvalue <= wksize }
- StdVLNSize := CountMax*2+6;
- {these variables need this much byte storage }
-
- getmem(a, StdVLNSize);
- getmem(b, StdVLNSize);
- getmem(c, StdVLNSize);
- getmem(d, StdVLNSize);
-
- a^.Max:= CountMax;
- b^.Max:= CountMax;
- c^.Max:= CountMax;
- d^.Max:= CountMax; { max must be set before being used }
-
- b^.SetSmall(10000);
- b^.NthPower(3);
- b^.NthPower(3); { 1.0 times 10 ^ 36 }
-
- for i := 1 to mSize do
- for j := 1 to msize do
- begin
- getmem(matrix1[i,j] , StdVLNSize);
- matrix1[i,j]^.setsmall((i-1)*mSize+j); {consecutive numbers }
- matrix1[i,j]^.Max:= CountMax;
- end;
-
-
- for i := 1 to mSize do
- begin
- for j := 1 to msize do
- begin
- if i=1 then
- write(i,'-',matrix1[i,j]^.tVLN[1],' ');
-
- a^.copy(matrix1[i,j]);
- matrix1[i,j] ^. copy(b); { scaled 1.0 = dividend }
- matrix1[i,j] ^. divby(a,d); { reciprocal }
-
- if i=1 then {write very few to screen }
- begin
- write ((i-1)*mSize+j,' '); matrix1[i,j]^.writeDecimal(0);
- writeln;
- end else write('.');
- end;
- end;
-
- writeln('--------------------------------');
-
-
- writeln('Done!');
-
- freemem(a, StdVLNSize); { user variables }
- freemem(b, StdVLNSize);
- freemem(c, StdVLNSize);
- freemem(d, StdVLNSize);
-
- for i := 1 to mSize do
- for j := 1 to msize do
- begin
- freemem(matrix1[i,j] , StdVLNSize);
- end;
-
- CloseTempRegs; { registers used by arithmetic }
- end.