home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / turbopas / tpl60n19.zip / README.DOC < prev    next >
Text File  |  1993-02-16  |  24KB  |  489 lines

  1.      Turbo-Pascal 6.0 Runtime Libary Update - Release 1.9   02-16-1993
  2.  
  3.  
  4.      This library is a complete replacement for the runtime library that
  5.      came with your Turbo Pascal 6.0 compiler. Due to lots of optimizations,
  6.      programs compiled with this version of TURBO.TPL will be faster.
  7.      This library maintains 99.9% compatibility with the original library.
  8.      Differences are usually due to enhancements and should not cause
  9.      any compatibility problems. Some bugs from the original library
  10.      supplied by Borland have been eliminated, but there can be no guarantee
  11.      that new ones have not crept in. If you discover any bugs, or have
  12.      other comments, please let me know. My email and snail mail addresses
  13.      are given below. Due to the nature of Borland's licensing of the
  14.      TPL source code I am not allowed to distribute the source code of
  15.      my enhanced library, so I can only provide the binary. What I am
  16.      including, starting with version 1.8, is the source for the LONGINT
  17.      and the REAL arithmetic routines. Also included for the first time in
  18.      this version is the source of most of the string routines. Since all
  19.      this code does not contain a single line of code written by Borland,
  20.      I think they can't object to the fact that I am making *my* code public.
  21.      The source for the arithmetic rouitnes is contained in the file
  22.      ARISOURC.ZIP. The source code of the string routines is contained in
  23.      file STRSOURC.ZIP. The code of the arithmetic and string routines is
  24.      hereby released into the public domain. You may use it in your own
  25.      programs under the condition that you do not include it into a
  26.      commercial product. Parties interested in commercial use of my code
  27.      should contact me at my address below.
  28.  
  29.  
  30.      THIS VERSION OF THE LIBRARY REPLACEMENT FOR TP 6.0 IS DEFINITELY THE
  31.      FINAL VERSION. NO FURTHER UPDATES WILL BE MADE, AS THE NEW 7.0 VERSION
  32.      OF TURBO PASCAL (AND BORLAND PASCAL) HAS BEEN INTRODUCED IN NOVEMBER
  33.      1992 AND IS NOW AVAILABLE IN LOCALIZED VERSIONS EVERYWHERE. I AM
  34.      PREPARING A SIMILAR LIBRARY FILE CALLED TPL70N10.ZIP FOR USE WITH
  35.      TP/BP 7.0.
  36.  
  37.  
  38.      Original library code is Copyright (C) 1983,91 Borland International
  39.  
  40.  
  41.      New / additional library code is Copyright (C) 1988-1993
  42.  
  43.      Norbert Juffa, Wielandtstr. 14, 7500 Karlsruhe 1, Germany
  44.      Internet: S_JUFFA@IRAVCL.IRA.UKA.DE
  45.  
  46.  
  47.  
  48.      Contents of this document:
  49.  
  50.      I.   Capabilities of RTL replacement
  51.      II.  Revision History
  52.      III. References
  53.  
  54.  
  55.  
  56.      I. Capabilities of RTL replacement
  57.      ==================================
  58.  
  59.      Improvements in SYSTEM module
  60.      -----------------------------
  61.  
  62. o    REAL type software arithmetic operations now comply with ANSI/IEEE
  63.      Standard 754-1985 for Binary Floating Point Arithmetic [1,2] as much
  64.      as possible. Note that REAL arithmetic by design differs from the
  65.      standard in many ways, especially available numeric formats, value
  66.      set, and available operations. The rounding mode implemented here
  67.      is "round to nearest or even" as specified by the standard. Add,
  68.      Subtract, Multiply, Squaring, Division, and Square Root deliver
  69.      exact results with regard to this rounding mode, as demanded by the
  70.      standard. Conversions from REAL to LONGINT and from EXTENDED to REAL
  71.      use rounding to nearest or even, as specified in the standard. Correct
  72.      implementation of above features was tested with the PARANOIA test
  73.      program [3]. The correctness of basic REAL arithmetic functions has
  74.      also been tested against the coprocessor/emulator EXTENDED format
  75.      with the program FUN1_TST. The EXTENDED format carries approximately
  76.      19 decimal digits of precision.
  77.  
  78. o    REAL arithmetic operations have been sped up. Speed-up for SQRT varies
  79.      between a factor of 12 for a 8086 and 29 for a Cyrix 486DLC. FRAC now 
  80.      executes at nearly three times the original speed. Speed-up for SIN, 
  81.      COS, ARCTAN, LN, EXP is between 50% and 100%. Division is now between
  82.      60% and 300% faster than before, depending on the CPU. Overall numeric 
  83.      processing power using REAL arithmetic increases by about 51% for an 
  84.      8086, by 62% for an Intel 386DX, and 80% for a Cyrix 486DLC as measured 
  85.      by the WHETSTONE benchmark [4,5].
  86.  
  87. o    Overall accuracy of REAL arithmetic transcendental functions has been
  88.      improved as indicated by Cody&Waite's ELEFUNT tests [6]: DLOG, DEXP,
  89.      DATAN, DSIN. Correct argument reduction ensures that relative error
  90.      over the whole argument range does not exceed 1.9e-12 for Exp, 2.8e-12
  91.      for Arctan, and 2.7e-12 for Ln. These values have been determined
  92.      by comparing the function returns of the REAL transcendental functions
  93.      to the values computed on a Cyrix 83D87 coprocessor for the EXTENDED
  94.      format. For Sin and Cos, relative error is also in the above range
  95.      when the argument is reasonably small (e.g. in range -100..100) and
  96.      not very close to an integer multiple of 0.25*Pi. The error of the
  97.      transcendental functions expressed in ULPs (units in the last place)
  98.      over the whole argument range does not exceed 1.6 ULPs for Exp, 1.8
  99.      ULPs for Arctan, and 2.2 ULPs for Ln. These values were determined
  100.      using the ULPERR program.
  101.  
  102. o    Execution of coprocessor floating point computations using an 80287 or
  103.      80387 has been accelerated. For these coprocessors, NOPs will be inserted
  104.      before every floating point instruction converted from an emulator
  105.      interrupt instead of WAITs. As a result of this optimization, an
  106.      improvement in execution speed of 15% has been observed running the
  107.      Lawrence Livermore Loops (LLL) [7] on a Cyrix 83D87, the improvement
  108.      for the WHETSTONE benchmark on the 83D87 is 9.4%. Maximum performance
  109.      gain for tight loops (e.g. fractal computation) by this measure is about
  110.      22%.
  111.  
  112. o    On 80287XL, 80387, 80486DX or compatible chips the Sin and Cos functions
  113.      take advantage of the FSIN and FCOS instructions of these coprocessors,
  114.      speeding up these functions by almost a factor of two. As a side effect,
  115.      there is also some improvement in accuracy as measured by the DSIN test
  116.      program from the ELEFUNT test suite. Also, the Arctan function takes
  117.      advantage of the increased argument range of the FPATAN function. These
  118.      optimizations result in another 19% increase in WHETSTONE power, so
  119.      that the total combined speedup over the original library is 25%
  120.      for this benchmark when run on a 387 compatible coprocessor.
  121.  
  122. o    STRING operations are faster, especially for longer strings. Most
  123.      dramatic increase is in the INSERT function, with execution times
  124.      reduced to up to one fourth compared with the original version of
  125.      the RTL. Faster string operations cause 7% performance increase for
  126.      the DHRYSTONE [8,9] benchmark on a 8086.
  127.  
  128. o    Improved speed of random number generation. Random for REAL numbers
  129.      is 10-20% faster, Random for EXTENDED numbers is 5% faster. Due to
  130.      the improvements in the uniform distribution of integer random numbers,
  131.      there is a decrease in the speed of integer random number generation
  132.      of about 5%.
  133.  
  134. o    Binary to decimal conversions used in Str and Write procedures have
  135.      been sped up by up to 70% for integers (BYTE, SHORTINT, INTEGER,
  136.      WORD, LONGINT), up to 5% for REAL numbers and about 3% for EXTENDED
  137.      numbers.
  138.  
  139. o    Improved speed of LONGINT arithmetic. Division enjoys fourfold reduction
  140.      of execution time on 8086, for an Intel RapidCAD CPU the speed up factor
  141.      is 5.2 and for a Cyrix 486DLC the speed-up factor is 10.1.
  142.  
  143. o    Several of the functions of the heap manager have been tuned, resulting
  144.      in 6%-18% faster operation for these routines, depending on the CPU used.
  145.  
  146. o    Set functions have been sped up by a few percent, but the add variable
  147.      range operation may be up to eight times as fast.
  148.  
  149. o    UPCASE function has been enhanced to support the complete IBM character
  150.      set. This means that characters ä,ü,ö,å,æ,é,ñ,ç are converted to upper
  151.      case by this function.
  152.  
  153. o    Several bugs of the original RTL supplied by Borland have been fixed:
  154.  
  155.      Using REAL arithmetic in $N- mode, Trunc and Round could not produce
  156.      the smallest legal LONGINT number -2147483648. Arguments that should
  157.      result in this number caused a run time error 207 instead. Trunc/Round
  158.      now will return the correct result of -2147483648. Correct implementation
  159.      can be checked using the ROUNDTST program.
  160.  
  161.      The Random function could return 1.0 when compiled in the $N+ state,
  162.      although the specifications call for a return value 0 <= Random < 1.
  163.      This has been corrected. Return values from Random are strictly
  164.      smaller than 1 now.
  165.  
  166.      The integer Random function would return unevenly distributed random
  167.      numbers if the upper limit passed to the routine was not a power of
  168.      two. The new function in TPL60N19.ZIP should return uniformly distributed
  169.      random numbers for all arguments of the integer Random function.
  170.  
  171.      GetDir now correctly returns a run-time error 15 (invalid drive)
  172.      when called with a non existent drive. Differing from the original,
  173.      it also signals all errors reported by DOS as run-time errors. E.g.
  174.      when applied to a floppy drive that does not contain a floppy, it
  175.      will now return run-time error 152 (drive not ready), where previously
  176.      it would incorrectly signal successful completion of the operation
  177.      (InOutRes = 0).
  178.  
  179.      LONGINT Read and Val routines now accept the smallest LONGINT
  180.      number -2147483648 as decimal input.
  181.  
  182.      For programs compiled with $N+, only true INFs are printed out as
  183.      INF where with the original library some NaNs are also printed as
  184.      INF. Correct operation can be tested with the INFBUG program.
  185.  
  186.      Addition/Subtraction of REAL arithmetic sometimes was unnecessarily
  187.      inaccurate due to incorrect handling of discarded digits of the
  188.      operand with smaller absolute value. This has been fixed with the
  189.      introduction of a completely new add/subtract routine.
  190.  
  191.      Multiplication of REAL numbers by small integers was inaccurate,
  192.      causing among others problems unnecessary inaccuracies in binary
  193.      <-> decimal conversion. This has been eliminated with the new
  194.      REAL arithmetic modules.
  195.  
  196.      REAL arithmetic EXP functions no longer signals overflow when
  197.      called with small arguments, but underflows to zero instead as it
  198.      should.
  199.  
  200.      Denormals in EXTENDED computations no longer cause invalid state
  201.      on 8087 coprocessor when being converted to true zeros. Consistency
  202.      between register contents and tag bits is now asserted. Removal of
  203.      this bug can be tested with the BUG87 program.
  204.  
  205.      Denormals in EXTENDED format are now correctly converted to decimal
  206.      strings by the Str and Write routines. The original routines printed
  207.      EXTENDED precision denormals as zero. Note that TP 6.0 supports
  208.      EXTENDED denormals only if your machine has an 80287XL, 80387, 80486
  209.      or equivalent. On the 8087 and Intel's original 80287 coprocessor
  210.      denormals are only supported for the SINGLE and DOUBLE formats.
  211.  
  212.      Stack checking routine for programs compiled in the $S+ state now
  213.      reliably detects all stack overflows. This bug in TP 6.0 has also
  214.      been fixed in the second release of TP 6.0 by Borland, but Borland's
  215.      code is slower than the one used here.
  216.  
  217.      Program initialization routine now tries to prevent that programs
  218.      compiled with the $G+ (286 code generation) switch are run on 8086
  219.      and 8088. The checks done are not 100% safe, but catch most of these
  220.      cases, displaying the message "CPU > 8086 required" and aborting the
  221.      program with a return code of 254 ($FE) instead of letting it crash.
  222.      Note that this check lets programs compiled with $G+ run on 80186 and
  223.      V20/V30 processors, since these have the ability to execute all 80286
  224.      real mode instructions produced by Turbo Pascal.
  225.  
  226. o    Improved functionality only marginally increases overall code length
  227.      of the SYSTEM unit by 1244 bytes (about 6%). This is due to careful
  228.      optimizing in numerous routines. Most programs compiled with the new
  229.      RTL will be smaller due to finer granularity of the RTL modules.
  230.      Savings are usually in the 0.5 KB range for reasonably large programs.
  231.  
  232.  
  233.  
  234.      Improvements in CRT module
  235.      --------------------------
  236.  
  237. o    Bug fix in routine DirectWrite. The method used to prevent "snow"
  238.      when writing directly to a CGA graphics card was not entirely safe.
  239.      When used in a heavily interrupted program (e.g. serial communication
  240.      as a background task), it would not always write during the time
  241.      when scanning was in the invisible parts of the screen. The method
  242.      used now is 100% save and is even faster, since it takes advantage
  243.      of the horizontal and vertical retrace periods, as opposed to the
  244.      old method which only used the horizontal retrace time. New routine
  245.      has been tested successfully on original IBM-CGA card.
  246.  
  247.  
  248.  
  249.      II. Revision History
  250.      ====================
  251.  
  252.      Changes since version 1.8, dated 12-04-92
  253.      -----------------------------------------
  254.  
  255. o    While previous versions of the replacement library had been optimized
  256.      for speed and size (in that order), version 1.9 has been tuned for
  257.      speed exlusively. All entries to library routines are now aligned on
  258.      double word boundaries, as are the some timing critical loops. This
  259.      optimization is aimed specifically at 386 and 486 processors. The
  260.      increased speed of this library version was achieved by putting in
  261.      additional code, so programs compiled with version 1.9 of the library
  262.      tend to be somewhat bigger than those compiled with version 1.8.
  263.      However, the increase in size is well in the range of a few hundred
  264.      bytes at most.
  265.  
  266. o    Speed of REAL arithmetic transcendental functions has been increased by
  267.      about 20%.
  268.  
  269. o    Speed of heap memory allocation/deallocation has been increased by
  270.      about 5%.
  271.  
  272.  
  273.      Changes since version 1.7, dated 10-12-92
  274.      -----------------------------------------
  275.  
  276. o    Fixed bug in LONGINT division. If the dividend was -2147483648 and the
  277.      divisor 65536, the division routine would incorrectly return 32768
  278.      instead of -32768 before.
  279.  
  280. o    Fixed bug in Str -> LONGINT conversion introduced in version 1.6. Because
  281.      of this bug, the valid input $80000000 would cause a runtime-error.
  282.  
  283. o    Speed of the LONGINT -> Str conversion has been improved by a factor
  284.      of up to 2, depending on the CPU.
  285.  
  286. o    Speed of LONGINT shift routines (SHL, SHR) has been improved by a factor
  287.      of up to 3, depending on the CPU.
  288.  
  289. o    Speed of LONGINT division has been improved for large divisors.
  290.  
  291. o    The integer Random function has been enhanced to deliver more evenly
  292.      distributed numbers. The algorithm used has been taken from BP 7.
  293.  
  294.  
  295.      Changes since version 1.6, dated 08-31-92
  296.      -----------------------------------------
  297.  
  298. o    The Round function for REAl arithmetic would sometimes not return the
  299.      correct IEEE-rounded result due to wrong handling of the sticky flag.
  300.      This has been fixed.
  301.  
  302. o    Size of the RTL has been reduced a bit.
  303.  
  304.  
  305.      Changes since version 1.5, dated 06-10-92
  306.      -----------------------------------------
  307.  
  308. o    The Test8087 variable would sometimes contain the wrong value when
  309.      the environment conatined the string 87=Y. This has been fixed.
  310.  
  311. o    Speed and accuracy of the REAL arithmetic Sin und Cos functions have
  312.      been enhanced. The previously introduced limits for arguments to these
  313.      functions have been removed. Sin and Cos now accept all REAL numbers
  314.      as arguments without producing a run-time error, just like the routines
  315.      in the original TP 6.0 RTL. Due to the nature of the argument reduction
  316.      scheme now used, the accuracy of the Sin and Cos functions takes a
  317.      rather sharp drop if the arguments exceed an absolute value of about 1e8.
  318.      Outside this range, accuracy is about the same as for the Sin and Cos
  319.      from the original library. There is a gradual loss of precision towards
  320.      bigger arguments. For arguments with an absolute value of more than
  321.      about 5e12, there is a total loss of precision. Sin always returns 0,
  322.      Cos always returns 1 for arguments exceeding this limit.
  323.  
  324.  
  325.      Changes since version 1.4, dated 05-07-92
  326.      -----------------------------------------
  327.  
  328. o    Fixed fatal bug in the Reset procedure. When applying Reset to an
  329.      already open file, the procedure would crash the program during
  330.      the automatic closing of the file before reopening it. This bug was
  331.      reported by Chris Dennis (dennis_c@kosmos.wcc.govt.nz). Thanks!
  332.  
  333. o    Fixed bug in the Float->String conversion routine of the original RTL
  334.      that caused EXTENDED precision denormals to be printed as zero. The
  335.      conversion routine has been further enhanced to correctly print
  336.      unnormals on machines with a 387 or 486. Note that these processors
  337.      do not support unnormals, whereas the 8087 and 287 do. The original
  338.      RTL only prints unnormals correctly on machines that have a coprocessor
  339.      that supports this format. Since it is possible that unnormal numbers
  340.      stored by a 8087/287 are loaded into a 387/486, e.g. via a binary data
  341.      file, the conversion routine was changed to handle unnormals on all
  342.      processors. Note that due to this change, there is a difference in
  343.      printout between the original RTL and this RTL on machines with a
  344.      8087/287. The original RTL prints unnormals in an unnormalized format
  345.      e.g. -0.2777289e-4387, whereas this library prints unnormals in a
  346.      normalized format, e.g. -2.777289e-4388. The new conversion routine
  347.      can handle all EXTENDED encodings, even those not supported by the
  348.      387/486 processors [10]. Zeroes and Pseudozeros are printed as zero,
  349.      NaNs, Pseudo-NaNs, and Indefinite (a special NaN) are printed as NAN,
  350.      Infinities and Pseudoinfinities are printed as INF, unnormals are
  351.      printed the same way as normals/denormals after normalizing them as
  352.      much as possible.
  353.  
  354. o    Improved speed and accuracy of REAL ArcTan function.
  355.  
  356. o    Improved speed and accuracy of REAL Exp function.
  357.  
  358. o    Improved speed of REAL addition/subtraction and Round/Trunc to match
  359.      more closely the speed of these routines in the original RTL. These
  360.      routines had suffered a drop in performance due to increased accuracy
  361.      requirements before.
  362.  
  363.  
  364.      Changes since version 1.3, dated 05-01-92
  365.      -----------------------------------------
  366.  
  367. o    Fixed bug that set Test8087 variable incorrectly for 8087/80287
  368.      coprocessors.
  369.  
  370. o    Fixed bug in REAL Ln function error return. It would return the biggest
  371.      possible REAL number before if called with an argument <= 0. It now
  372.      correctly raises error 207 (invalid floating-point operation).
  373.  
  374.  
  375.      Changes since version 1.2, dated 11-01-92
  376.      -----------------------------------------
  377.  
  378. o    Fixed bug in Rename procedure. Due to this error, Rename would not
  379.      work at all, but always return with error code 3 (path not found).
  380.      This has been corrected. This error was reported by ShinKuang Chang
  381.      (skchang@csemail.cropsci.ncsu.edu). Thanks!
  382.  
  383. o    Cleaned up the source code of the ELEFUNT test programs a bit. Since
  384.      these programs were ported from the FORTRAN original in a 'quick and
  385.      dirty' way, they were looking quite messy.
  386.  
  387.  
  388.      Changes since version 1.1 beta, dated 04-01-92
  389.      ----------------------------------------------
  390.  
  391. o    The Round and Trunc functions were unable to produce the smallest
  392.      LONGINT number, -2147483648. If a call to these functions resulted
  393.      in this number, an error was raised instead of returning the correct
  394.      result. This has been fixed. Valid inputs to the Trunc functions are
  395.      REAL numbers x for which -2147483649 < x < 2147483648 holds. Valid
  396.      inputs to the Round function are numbers x for which -2147483648.5
  397.      <= x < 2147483647.5 holds.
  398.  
  399.  
  400.      Changes since first beta release (version 1.0, dated 03-21-92)
  401.      --------------------------------------------------------------
  402.  
  403. o    Fixed bug in the routine that adds variable ranges to sets (as in
  404.      s := [foo..bar], where s is a set and foo and bar are variables of
  405.      the set's base type.
  406.  
  407. o    Switched back code in the REAL add/subtract routine to plain 8086
  408.      code. Forgot to remove the use386 flag when building code for the
  409.      original release 1.0 beta.
  410.  
  411.  
  412.      Changes since the alpha release
  413.      -------------------------------
  414.  
  415. o    There was an error in the 8087 float to string conversion in the
  416.      alpha release which has been fixed.
  417.  
  418. o    A bug in the coprocessor identification that sets the Test8087 variable
  419.      present in the alpha release has been fixed.
  420.  
  421. o    For string -> LONGINT conversion, it is now possible to input the
  422.      smallest LONGINT number -2147483648 in decimal.
  423.  
  424. o    An enhanced argument reduction has been implemented for REAL arithmetic
  425.      SIN, COS, and EXP function, delivering much more accurate results over
  426.      the complete argument range. This has slowed these functions down
  427.      somewhat, however, none of them runs slower than in the original TP 6.01
  428.      RTL. As a result of the new argument reduction, arguments to SIN and
  429.      COS are restricted to the range -3.37325e9..3.37325e9 now. Arguments to
  430.      these functions were previously unrestricted. For arguments outside the
  431.      range given, an error 207 will result. This is consistent with the
  432.      coprocessor/emulator generated SIN/COS functions, that also signal
  433.      error 207 for arguments out of range (-9.22337e18..9.22337e18).
  434.  
  435. o    SIN, COS, and ARCTAN functions compiled in the $N+ state will now use
  436.      the faster coprocessor instructions available on the 387 and 486 if
  437.      such a coprocessor/FPU is present.
  438.  
  439. o    A check has been included to prevent programs compiled with $G+ (286 code
  440.      generation) to run on a 8086.
  441.  
  442. o    The Random function has been fixed to return values strictly smaller than
  443.      1 when compiled with $N+.
  444.  
  445.  
  446.  
  447.      III. References
  448.      ===============
  449.  
  450. [1]  IEEE: IEEE Standard for Binary Floating-Point Arithmetic.
  451.      SIGPLAN Notices, Vol. 22, No. 2, 1985, pp. 9-25
  452.  
  453. [2]  IEEE Standard for Binary Floating-Point Arithmetic.
  454.      ANSI/IEEE Std 754-1985.
  455.      New York, NY: Institute of Electrical and Electronics Engineers 1985
  456.  
  457. [3]  Karpinski, R.: Paranoia: A Floating-Point Benchmark.
  458.      Byte, February 1985, pp. 223-235
  459.  
  460. [4]  Curnow, H.J.; Wichmann, B.A.: A synthetic benchmark.
  461.      Computer Journal, Vol. 19, No. 1, 1976, pp. 43-49
  462.  
  463. [5]  Wichmannn, B.A.: Validation code for the Whetstone benchmark.
  464.      NPL Report DITC 107/88, National Physics Laboratory, UK, March 1988
  465.  
  466. [6]  Cody, W.J.; Waite, W.: Software Manual for the Elementary Functions.
  467.      Englewood Cliffs, NJ: Prentice Hall 1980
  468.  
  469. [7]  McMahon, H.H.: The Livermore Fortran Kernels: A Test of the Numerical
  470.      Performance Range.
  471.      Technical Report UCRL-53745, Lawrence Livermore National Laboratory,
  472.      December 1986, p. 179
  473.  
  474. [8]  Weicker, R.P.: Dhrystone: A Synthetic Systems Programming Benchmark.
  475.      Communications of the ACM, Vol. 27, No. 10, October 1984, pp. 1013-1030
  476.  
  477. [9]  Weicker, R.P.: Dhrystone Benchmark: Rationale for Version 2 and
  478.      Measurement Rules.
  479.      SIGPLAN Notices, Vol. 23, No. 8, August 1988, pp. 49-62
  480.  
  481. [10] 387DX User's Manual, Programmer's Reference. Intel 1989
  482.  
  483.  
  484.      Note:
  485.  
  486.      PARANOIA, DHRYSTONE, WHETSTONE, LLL, and ELEFUNT source code is
  487.      available from NETLIB@ORNL.GOV
  488.  
  489.