home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / math / verylarg / matrix2.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-10-22  |  2.4 KB  |  87 lines

  1. Program Roots;   { find a root of a number }
  2.                  {precision set at 36 digits }
  3.  
  4. uses    vlncls;
  5.  
  6. const precision = 20;
  7.       mSize = 30;
  8.  
  9. var  dummy : tWordArray;     { dummy }
  10.      i, j  ,
  11.      CountMax,StdVLNSize : integer;
  12.      a, b, c, d     : pVryLrgNo;
  13.      matrix1 : array[1.. mSize,1.. mSize] of pVryLrgNo;
  14.  
  15. begin
  16.     { wksize is initialized to 100 words of storage }
  17.     { but we make it larger or smaller before any memory is allocated }
  18.     Setwksize(precision*4);
  19.     OpenTempRegs;
  20.                             { standard subs need temp storage }
  21.                             { their max count is wksize      }
  22.                             { their needed storage is wksize*2+6 }
  23.  
  24.     CountMax := precision;          { set count to anyvalue <= wksize }
  25.     StdVLNSize := CountMax*2+6;
  26.        {these variables need this much byte storage }
  27.  
  28.     getmem(a, StdVLNSize);
  29.     getmem(b, StdVLNSize);
  30.     getmem(c, StdVLNSize);
  31.     getmem(d, StdVLNSize);
  32.  
  33.     a^.Max:=  CountMax;
  34.     b^.Max:=  CountMax;
  35.     c^.Max:=  CountMax;
  36.     d^.Max:=  CountMax;         { max must be set before being used }
  37.  
  38.     b^.SetSmall(10000);
  39.     b^.NthPower(3);
  40.     b^.NthPower(3);      { 1.0 times 10 ^ 36 }
  41.  
  42.     for i := 1 to mSize do
  43.       for j := 1 to msize do
  44.          begin
  45.           getmem(matrix1[i,j] , StdVLNSize);
  46.           matrix1[i,j]^.setsmall((i-1)*mSize+j);   {consecutive numbers }
  47.           matrix1[i,j]^.Max:=  CountMax;
  48.          end;
  49.  
  50.  
  51.     for i := 1 to mSize do
  52.     begin
  53.       for j := 1 to msize do
  54.          begin
  55.          if i=1 then
  56.              write(i,'-',matrix1[i,j]^.tVLN[1],'  ');
  57.  
  58.           a^.copy(matrix1[i,j]);
  59.           matrix1[i,j] ^. copy(b);     { scaled 1.0 = dividend }
  60.           matrix1[i,j] ^. divby(a,d);    { reciprocal }
  61.  
  62.         if i=1 then              {write very few to screen }
  63.              begin
  64.              write ((i-1)*mSize+j,'  '); matrix1[i,j]^.writeDecimal(0);
  65.               writeln;
  66.              end else write('.');
  67.          end;
  68.     end;
  69.  
  70.     writeln('--------------------------------');
  71.  
  72.  
  73.     writeln('Done!');
  74.  
  75.     freemem(a, StdVLNSize);         { user variables }
  76.     freemem(b, StdVLNSize);
  77.     freemem(c, StdVLNSize);
  78.     freemem(d, StdVLNSize);
  79.  
  80.     for i := 1 to mSize do
  81.       for j := 1 to msize do
  82.          begin
  83.           freemem(matrix1[i,j] , StdVLNSize);
  84.          end;
  85.  
  86.     CloseTempRegs;   { registers used by arithmetic }
  87.     end.