home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol244 / lpak11.doc < prev    next >
Encoding:
Text File  |  1986-02-11  |  18.9 KB  |  433 lines

  1.  
  2.                              LINPACK
  3.  
  4.                            Version 1.1
  5.                         February 22, 1985
  6.  
  7.                            Adam Fritz
  8.                          133 Main Street
  9.                       Afton, New York 13730
  10.  
  11.  
  12. INTRODUCTION
  13. ============
  14.  
  15.      Thi≤á writeu≡á discusse≤ Pasca∞ anΣ ├ conversioε anΣá microì
  16. compute≥ performancσ measuremen⌠ oε representativσ routine≤á froφ ì
  17. thσ LINPAC╦ (1⌐ library.
  18.  
  19.      Referencσ ▒ discusse≤ anΣ list≤ thσ routine≤ called;
  20.  
  21.    LINPAC╦ - LINea≥ system≤ PACKage,
  22.  
  23. along with supporting routines  called;
  24.  
  25.    BLAS - Basic Linear Algebra Subprograms.
  26.  
  27. Thesσá routine≤ comprisσ FORTRA╬ prograφ encoding≤ oµá algorithm≤ ì
  28. intendeΣá t∩á solvσ problem≤ connecteΣ witΦá simultaneou≤á linea≥ ì
  29. equations.
  30.  
  31.      Referencσ ▓ present≤ tabulation≤ oµ runtimσ performancσ  fo≥ ì
  32. applicatioε oµ tw∩ LINPAC╦ algorithms¼  viz.;
  33.  
  34.    SGEFA - Single precision/GEneral matrix/FActor
  35.  
  36. and
  37.  
  38.    SGESL - Single precision/GEneral matrix/SoLve,
  39.  
  40. for different precisions and different computers.
  41.  
  42.      The  routines  that accompany this writeup are listed  below 
  43. witΦ brieµ discussions«á   Pascal¼á C¼á anΣ correspondinτ FORTRA╬ ì
  44. routine≤á arσá presenteΣ iεá librarie≤á LPAK11/T¼á LPAK11/C¼á anΣ ì
  45. LPAK10/F, respectively.
  46.  
  47.    CODR - Driver for SGECO and SGEFA.
  48.    SLDR - Driver for SGEFA and SGESL.
  49.    DIDR - Driver for SGECO, SGEFA, and SGEDI.
  50.  
  51.       These are test driver programs.   They prompt the user  for 
  52.       test   system order and printout code.    They call  SYSGEN  
  53.       to  compose   a  coefficient matrix and a right  hand  side 
  54.  
  55. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730è      vector,  then call SGECO or  SGEFA as appropriate, and then 
  56.       call SGESL or SGEDI with intermediate printout  conditioned 
  57.       on a user prompted print flag.
  58.  
  59.    SYSGEN - Generate Test Matrix and Object Vector.
  60.  
  61.       Test system generator.   This program is taken from a  SICE 
  62.       test program by the author.   It generates a Hilbert matrix 
  63.       and a right hand side vector comprised of the matrix diago
  64.       nal.   The  test  matrix is arbitrary because  Reference  2 
  65.       compare≤á runtimσ anΣ no⌠ precision«á Thi≤ tes⌠á matri°á i≤ ì
  66. áááááásymmetriπ  rathe≥ thaε genera∞ anΣ i≤ ß poorl∙  conditioneΣ 
  67.       system.
  68.  
  69.    SGECO - Single Precision General Matrix Condition.
  70.    SGEFA - Single Precision General Matrix Factorization.
  71.    SGESL - Single Ptrecison General System Solution.
  72.    SGEDI - Single Precision General Determinant and Inverse.
  73.  
  74.       Translated from Reference 1.
  75.  
  76.    OUT - Show Intermediate Results Conditioned on Print Code.
  77.  
  78.       Adapted from Reference 3.
  79.  
  80.    ISAMAX - Integer Valued Single Precision Real Array Maximum.
  81.    SASUM - Sum of Absolute Values.
  82.    SAXPY - Single  Precision Real Vector Times a Constant Plus  a 
  83.            Vector.
  84.    SCOPY - Copies Vector to Vector.
  85.    SDOT - Single Precison Real Vector Dot Product of Two Vectors.
  86.    SSCAL - Single Precision Real Vector Times a Constant.
  87.    SSWAP - Swap Two Vectors.
  88.  
  89.       Translated from Reference 1 onto BLAS.
  90.  
  91.  
  92. CONVERSION
  93. ==========
  94.  
  95. Pascal
  96. ------
  97.  
  98.      There  are  two important conversion  issues;  FORTRAN  vrs. 
  99. Pasca∞á subprograφá arguments¼á anΣ FORTRA╬ vrs«á Pasca∞á storagσ ì
  100. allocatioεá t∩ multidimensiona∞ arrays«á Therσ arσá man∙á change≤ ì
  101. tha⌠ arσ syntactical¼á somσ tha⌠ arσ matter≤ oµ programinτ style¼  ì
  102. anΣ  ß fe≈ baseΣ oε expedien⌠ conformit∙ t∩ microcompute≥ runtimσ ì
  103. environments.
  104.  
  105.      Pascal  is a so-called strongly typed language.   If a vari
  106. able is declared to be an array and is used as an actual argument 
  107.  
  108.  
  109. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730èto  a subprogram with a formal argument that is  scalar,  then  a 
  110. compiler error message notes the inconsistent usage.  FORTRAN has 
  111. no such qualms.   Part of the terseness and ingenuity of BLAS and 
  112. LINPACK  in  FORTRAN is the way arrays and parts  of  arrays  are
  113. communicated.   FORTRAN uses call by name so that when an element 
  114. of  an  array is used as an actual argument the address  of  that 
  115. elemen⌠á i≤ presenteΣ t∩ thσ subprogram«á  Iµ thσ subprograφá deì
  116. clare≤ the corresponding formal argument to be a vector then  the 
  117. corresponding components of the actual array can be accessed.  In 
  118. Pascal  such  usage is that associated with pointers.   The  BLAS 
  119. routines have been modified to make explicit use of pointers. The 
  120. changes do not materially affect the routines.
  121.  
  122.      LINPACK and BLAS,  in particular,  are written to conform to 
  123. FORTRAN usage in allocating storage to multidimensional arrays by 
  124. column or with first subscript changing fastest.   Pascal,  TURBO 
  125. Pasca∞ anΣ M╙ Pasca∞ anyway¼á store≤ b∙ row«á Thσ foresigh⌠ showε ì
  126. iεá desigεá oµ BLA╙ allow≤ thi≤ probleφ t∩ bσá solveΣá simpl∙á b∙ ì
  127. changinτá thσ incremen⌠ specifieΣ oε call≤ t∩ BLA╙ froφá LINPACK« ì
  128. Thσ  LINPAC╦ change≤ arσ simplσ anΣ thσ BLA╙ routine≤ arσ altereΣ ì
  129. t∩ removσ thσ partiall∙ unrolleΣ loop≤ fo≥ no≈ unlikel∙ case≤  oµ  ì
  130. unit∙ increment.
  131.  
  132.      Therσ arσ syntactica∞ difference≤ betweeε Pasca∞ version≤ iε ì
  133. handlinτá pointers«á  TURB╧á use≤ '^Objectº t∩ denotσá ßá pointe≥ ì
  134. whilσá M╙á Pasca∞ use≤ 'AD╙ O╞ Objectº witΦá simila≥á difference≤ ì
  135. betweeε usagσ oµ Ptr¼ anΣ Add≥ o≥ Seg/Of≤ witΦ TURB╧ anΣ AD╙ witΦ ì
  136. MS«á  Thσá routine≤ distributeΣ witΦ thi≤ releasσ arσá compatiblσ ì
  137. with TURBO.
  138.  
  139. C
  140. -
  141.      Iεá additioεá t∩ thσ chieµ Pasca∞ conversioεá issues¼á viz.¼ ì
  142. argumen⌠ convention≤ anΣ ro≈ majo≥ arra∙ storage¼á ├ als∩á raise≤ ì
  143. thσá zer∩á origiεá indexinτ issue«á  Thi≤ probleφ i≤á avoideΣá iε ì
  144. Pasca∞ b∙ declarinτ dimension≤ [1..n]«á  Iε C¼ declarinτ ß dimenì
  145. sioεá [n▌ mean≤ indice≤ froφ ░ t∩ n-1«á  Thi≤ create≤á ßá probleφ ì
  146. becausσá i⌠ force≤ distinctioε betweeε variable≤ useΣ a≤á indice≤ ì
  147. anΣ thosσ useΣ a≤ counters.
  148.  
  149.      Iε additioε t∩ thσ routine≤ distributeΣ fo≥ Pasca∞ therσá i≤ ì
  150. ßá routinσá iε ├ nameΣ Abs(⌐ whicΦ return≤ floa⌠ absolutσ oµá it≤ ì
  151. argument.
  152.  
  153.  
  154.  
  155. PERFORMANCE
  156. ===========
  157.  
  158.      The  table below is excerpted from Reference 2 showing  per
  159. formancσá usinτ singlσ precisioε arithmetiπ fo≥ ß 100x10░á linea≥ ì
  160.  
  161.  
  162.  
  163. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730èsysteφá  witΦá variou≤á equipmen⌠ anΣá softwarσá  configurations«  ì
  164. Entrie≤á fo≥ SBC-200¼á CO16¼á anΣ Heath/Zenith-10░ microcomputer≤ ì
  165. arσ interpolated.
  166.  
  167.      Thσá micr∩á compute≥ softwarσ whosσ performancσ i≤á reporteΣ ì
  168. herσá doe≤ no⌠ convenientl∙ suppor⌠ 100x10░ arrays«á Thσá 100x10░ ì
  169. result≤ arσ extrapolateΣ froφ nxε case≤ iε accorΣ witΦá Ref. ▒;
  170.  
  171.                       3                    2
  172.    Time(100) = (100/n) * SGEFA(n) + (100/n) * SGESL(n)    
  173.  
  174. wherσá εá wa≤ eithe≥ 7╡ o≥ 5░ dependinτ, generall∙, upoεá whethe≥ ì
  175. singlσ o≥ ful∞ precisioε wa≤ employed;
  176.  
  177.    --------------------------------------------------------------
  178.   |                                                             |
  179.   |          Solving a System of Linear Equations               |
  180.   |             with LINPACK in Half Precision                  |
  181.   |                                                             |
  182.   |  computer           os/compiler        ratio  mflops  time  |
  183.   |                                                       secs  |
  184.   |                                                             |
  185.   |  Fujitsu vp-200     f77 (c dir)         0.62   20     .035  |
  186.   |  Fujitsu vp-200     f77 (r blas)        0.69   18     .039  |
  187.   |  Hitachi s-810/20   f77/hap (r blas)    0.78   16     .044  |
  188.   |  NAS 9060 w/vpf     vs opt=2 (c blas)   1.5    8.4    .082  |
  189.   |  Fujitsu m-380      f77 opt=3           1.7    7.0    .098  |
  190.   |  Amdahl 5860 hsfpf  h enh opt=3         2.2    5.5    .125  |
  191.   |  NAS 9060           vs opt=2            2.4    5.2    .133  |
  192.   |  Amdahl 5860 hsppf  vs opt=3            2.4    5.1    .135  |
  193.   |  Amdahl 470 v/8     h enh opt=3         4.4    2.8    .246  |
  194.   |  Amdahl 470 v/8     vs opt=3            4.5    2.7    .254  |
  195.   |  IBM 3081 k         h enh opt=3         5.1    2.4    .283  |
  196.   |  IBM 3081 k         vs opt=3            5.6    2.2    .311  |
  197.   |  IBM 3033           vs fortran          6.3    1.9    .353  |
  198.   |  IBM 3081 d         vs opt=3            6.7    1.8    .376  |
  199.   |  IBM 4381           vs opt=3            14     .86    .353  |
  200.   |  Harris 1000        vos 3.3 (c blas)    15     .83    .825  |
  201.   |  Harris 1000        vos 3.3 opt g       22     .57    1.21  |
  202.   |  Concept 32/8750    utx/32              23     .54    1.27  |
  203.   |  VAX 11/785 fpa     vms (c blas)        23     .53    1.30  |
  204.   |  Univac 1100/81     ascii opt=zeo       24     .52    1.32  |
  205.   |  IBM 4361           vs opt=3            29     .42    1.65  |
  206.   |  DG mv/10000        f77 opt level 2     31     .39    1.75  |
  207.   |  VAX 11/785 fpa     vms                 36     .34    2.01  |
  208.   |  VAX 11/780 fpa     vms (c blas)        37     .33    2.08  |
  209.   |  IBM 370/158        h opt=3             42     .29    2.35  |
  210.   |  ND-500             fortran-500-e       43     .27    2.58  |
  211.   |  DEC kl-20          f20                 46     .27    2.59  |
  212.   |  IBM 370/158        vs opt=3            46     .26    2.60  |
  213.   |  Univac 1100/62     ascii opt=zeo       49     .25    2.77  |
  214.   |  ICL 2988           f77 opt=2           50     .25    2.79  |
  215.  
  216.  
  217. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730è  |  Harris 800         f77                 53     .23    2.99  |
  218.   |  VAX 11/750 fpa     vms (c blas)        56     .22    3.14  |
  219.   |  IBM 4341 mg10      cs opt=3            57     .22    3.18  |
  220.   |  VAX 11/780 fpa     bsd unix 4.2 f77    58     .21    3.25  |
  221.   |  VAX 11/780 fpa     vms v4.2            58     .21    3.27  |
  222.   |  Honeywell 6080     y                   62     .20    3.46  |
  223.   |  Concept 32/6750    utx/32              65     .19    3.63  |
  224.   |  DG mv/8000         f77 opt level 2     69     .18    3.84  |
  225.   |  VAX 11/780         vms                 74     .17    4.13  |
  226.   |  VAX 11/750 fpa     vms v3.4            88     .14    4.90  |
  227.   |  Ridge 32           f77                 88     .14    4.90  |
  228.   |  Prime 750          primos f77 v19.1    89     .14    5.00  |
  229.   |  VAX 11/750 fpa     bsd unix 4.2 f77    91     .13    5.12  |
  230.   |  Prime 850          primos              97     .13    5.41  |
  231.   |  HP 9000 series 500 fortran 1.7        125    .098    7.00  |
  232.   |  VAX 11/750         vms v3.4           138    .089    7.71  |
  233.   |  IBM 4331           h opt=3            140    .088    7.84  |
  234.   |  Apollo dn 460      ftn opt            145    .085    8.11  |
  235.   |  Pyramid w/o fpa    f77                151    .081    8.47  |
  236.   |  Apollo peb         4.1 (c blas)       177    .069    9.92  |
  237.   |  VAX 11/750         bsd unix 4.1 f77   204    .060    11.4  |
  238.   |  VAX 11/730 fpa     vms (c blas)       205    .060    11.5  |
  239.   |  VAX 11/725 fpa     vms (c clas)       205    .060    11.5  |
  240.   |  Masscomp 500 w/fp  unix f77 opt       227    .054    12.7  |
  241.   |  Burroughs 6700     h                  234    .052    13.1  |
  242.   |  Prime 2250         f77                258    .048    14.5  |
  243.   |  VAX 11/730 fpa     vms                259    .047    14.5  |
  244.   |  VAX 11/725 fpa     vms                259    .047    14.5  |
  245.   |  CRDS 6835+sky      svs f77            284    .043    15.9  |
  246.   |  IBM pc-xt/370      h opt=3            303    .040    17.0  |
  247.   |  DEC ka-10          f40                305    .040    17.1  |
  248.   |  Canaan             vs                 306    .040    17.1  |
  249.   |  SUN 2+sky          unix f77 opt       314    .039    17.6  |
  250.   |  Apollo peb         4.1                334    .037    18.7  |
  251.   |  Compaq pc/8087     ms3.13(c blas)     591    .021    33.1  |
  252.   |  CRDS 6835          svs f77            770    .016    43.1  |
  253.   *  CO16 8mhz 8087     ms3.2              846    .0145   47.4  *
  254.   |  Cadtrak ds1/8087   intel f77          893    .013    50    |
  255.   |  SUN 2              unix f77 opt       966    .013    54.1  |
  256.   |  Masscomp 500       unix f77 opt      1015    .012    56.8  |
  257.   |  IBM pc/8087        ms3.1             1071    .011    60    |
  258.   |  HP 9000 series 200 hp-ux             1196    .010    67    |
  259.   |  SUN                unix f77 no opt   1298   .0094    72.7  |
  260.   |  Tandy 2000         ms3.13            3763   .0033    211   |
  261.   *  CO16 8mhz 8086     tp3.01a           4911   .0025    275   *
  262.   *  SBC-200 4mhz z80   cp/m2.2/ms3.2    10946   .00112   613   *
  263.   *  SBC-200 4mhz z80   cp/m2.2/tp2.0    15301   .00080   857   *
  264.   *  CO16 8MHz 8086     tp2.00b          16250   .00075   910   *
  265.   |  IBM pc             ms3.1            21875   .00056  1225   |
  266.   *  SBC-200 4mhz z80   cp/m2.2/eco-c3.1 36071   .00034  2020   *
  267.   |  APPLE iii          pascal           50232   .00024  2813   |
  268.   *  SBC-200 4mhz z80   cp/m.2./cii1.06b 84677   .00014  4742   *
  269.   |_____________________________________________________________|
  270.  
  271. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730èwhere;
  272.  
  273.    ratio  - is to a Cray-1 S using FORTRAN coded BLAS. (Ref. 2)
  274.             See file LINPACK.ADD for FULL precision listing.
  275.    c blas & r blas - denote coded and rolled versions of BLAS.
  276.    mflops - millions  of floating point operations per second and 
  277.             there   are (2/3 n**3 + 2  n**2)   operations.   Each 
  278.             operation  comprises a multiplication,  an  addition, 
  279.             and the associated indexing and load and store  func
  280.             tions.  For n = 100 there are 686667 such operations.
  281.    time   - one call to SGEFA and one call to SGESL.
  282.  
  283.      TURBO  Pascal performs floating point arithmetic with  about 
  284. 11 decimal digits precision.   This is more than single precision 
  285. and less than double or extended precision.   This  difference is 
  286. important for applicability of numerical results.  
  287.  
  288.      Thσá routine≤ CODR.¬ arσ driver≤ fo≥ LINPACK'≤á SGECO«á  Thσ ì
  289. tablσ belo≈ show≤ thσ ra≈ anΣ foldeΣ valuσ oµá RCOND¼á reciproca∞ ì
  290. condition¼ oµ thσ matri° fo≥ differen⌠ order≤ oµ thσ samσ Hilber⌠ ì
  291. tes⌠ matrix« Thσ foldeΣ valuσ i≤ tha⌠ computeΣ (1.0+RCOND)-1.0« 
  292.  
  293. =================================================================
  294.                TURBO               |          MS Fortran
  295. -----------------------------------------------------------------
  296.          RCond           RCond     |     RCond          RCond
  297. order                   folded     |                   folded
  298. -----------------------------------------------------------------
  299. 3 | 1.46884015E-03  1.46884014E-03 | .14688422E-02  .14688969E-02
  300. 4 | 4.64608613E-05  4.64608602E-05 | .46460722E-04  .46491623E-04
  301. 5 | 1.44074255E-06  1.44074147E-06 | .14412633E-05  .14305115E-05
  302. 6 | 4.42113838E-08  4.42105375E-08 | .44548891E-07  .00000000E+01
  303. 7 | 1.34783286E-09  1.34605216E-09 |
  304. 8 | 4.08837011E-11  4.00177669E-11 |
  305. 9 | 1.21641596E-12  0.00000000E+00 |
  306. =================================================================
  307.  
  308.      The  test matrix is singular to working precision at order 6 
  309. fo≥ FORTRA╬ anΣ a⌠ orde≥ ╣ fo≥ TURBO«á Thi≤ difficult∙ i≤ furthe≥ ì
  310. illustrateΣ b∙ considerinτ RConΣ fo≥ Azteπ ├ I╔ anΣ Eco-C;
  311.  
  312. =================================================================
  313.              Aztec C II            |           Eco-C    
  314. -----------------------------------------------------------------
  315.          RCond           RCond     |     RCond          RCond
  316. order                   folded     |                   folded
  317. -----------------------------------------------------------------
  318. 3 | 1.468846E-03    1.464844E-03   | 1.468843E-3    1.468897E-3 
  319. 4 | 4.649139E-05    4.577637E-05   | 4.646098E-5    4.649162E-5  
  320. 5 | 1.464302E-06    0.000000E+00   | 1.441097E-6    1.430511E-6  
  321. 6 |                                | 4.475317E-8    0.000000E0   
  322. =================================================================
  323.  
  324.  
  325. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730è     Fo≥á botΦá thesσ case≤ ß 3▓ bi⌠ singlσ precisioεá forma⌠á i≤ ì
  326. used«á However¼á Azteπ ├ I╔ use≤ ß basσ 25╢ exponen⌠ whilσá Eco-├ ì
  327. use≤á ßá basσ ▓ exponen⌠ anΣ hiddeε bi⌠á normalization«á  Simila≥ ì
  328. difference≤ arisσ oε minΘ anΣ mainframσ computer≤ usinτ variousl∙ ì
  329. 32¼á 36¼á etc«á singlσ precisioε encoding≤ witΦ basσ 2¼á 16¼ etc« ì
  330. exponents«á  Azteπ ├ I╔ simpl∙ dramatize≤ thσ probleφ becausσá i⌠ ì
  331. allow≤á aε encodinτ witΦ a≤ fe≈ a≤ 1╖ significan⌠ bit≤ anΣá fail≤ ì
  332. t∩ providσ meaningfu∞ result≤ fo≥ ß 5x╡ tes⌠ matrix.
  333.  
  334.  
  335. COMMENT
  336. =======
  337.  
  338.      It  is  fatuous to suggest that timing benchmarks  have  any 
  339. meaning  for  application to this test matrix for  orders  beyond 
  340. those at which working precision vanishes.
  341.  
  342.      Thσ runtimσ anΣ precisioε benchmark≤ presenteΣ herσ contras⌠ ì
  343. favorabl∙áwitΦ publisheΣ microcompute≥ benchmarks«á LINPACKá rouì
  344. tine≤ arσ iε dail∙ applicatioε arounΣ thσ worlΣ solvinτá meaningì
  345. fu∞ problems.
  346.  
  347.  
  348. NOTES
  349. =====
  350.  
  351.    1. CODR, SLDR, and DIDR use a leading dimension that is speci
  352.       fied in LINPACK.CON or LINPACK.H, as appropriate.
  353.  
  354.    2. SGECO,  SGEFA,  SGESL,  and  SGEDI  are  just one  part  of 
  355.       LINPACK.   Other routines are offfered  by Reference 1 that 
  356.       deal  with  COMPLEX  variables  for  symmetric  and  banded 
  357.       systems   and   other  linear   systems   problems.   Their 
  358.       translations are not presented here.
  359.  
  360.    3. In  FORTRAN it is a simple matter to edit the source  files 
  361.       to  declare DOUBLE rather than REAL to get extended  preci
  362.       sion results. There is no corresponding facility in PASCAL.
  363.       C admits float and double.
  364.  
  365.    4. FORTRAN has a COMPLEX data type. Adaptation of the routines 
  366.       to COMPLEX variables using Pascal or C requires more work.
  367.  
  368.    5. ISAMAX,  SASUM,  SAXPY,  SCOPY,  SDOT, SSCAL, and SSWAP are 
  369.       those  components of BLAS required to support the  routines 
  370.       used  here.   Translations  of the other  BLAS  routines  - 
  371.       SNRM2, SROT, and SROTG are not presented here.
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730èREFERENCE
  380. =========
  381.  
  382.    1. LINPACK Users' Guide
  383.       J.J. Dongarra, C.B. Moler, J.R. Bunch, and G.W. Stewart
  384.       Society for Industrial and Applied Mathematics
  385.       1979
  386.  
  387.    2. Performance of Various Computers Using Standard Linear
  388.          Equations Software in a Fortran Environment
  389.       Technical Memorandum No. 23
  390.       J.J. Dongarra
  391.       Mathematics and Computer Science Division
  392.       Argonne National Laboratory
  393.       August 1984, Revision 2
  394.  
  395.    3. Algorithm 589
  396.       Collected Algorithms of the ACM
  397.       ACM Transactions on Mathematical Software
  398.       Volume 8, Number 4
  399.       December, 1982
  400.  
  401.  
  402. NOTICES
  403. =======
  404.  
  405. CO16 (tm) Hallock Systems Company
  406. SBC-200 (tm) SD Systems
  407. H/Z-100 (tm) Zenith Data Syatems
  408.  
  409. CP/M (tm) Digital Research
  410. MS-DOS (tm) Microsoft
  411.  
  412. TURBO Pascal (tm) Borland International
  413. Aztec C II (C) Manx Software Systems
  414. Eco-C (C) Ecosoft
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433. Copyright (C) 1985 Adam Fritz, 133 Main Street, Afton, NY  13730è