(FILECREATED "17-Oct-86 18:24:12" {ERIS}<LISPCORE>SOURCES>AARITH.;14 31761  

      changes to:  (VARS AARITHCOMS \TAN-PPOLY \TAN-QPOLY \SIN-PPOLY \SIN-QPOLY)
                   (FNS TAN \TAN-FLOAT \TAN.OLD SIN COS \SIN-FLOAT \SIN.OLD \COS.OLD)

      previous date: "15-Oct-86 20:21:53" {ERIS}<LISPCORE>SOURCES>AARITH.;13)


(* "
Copyright (c) 1981, 1983, 1984, 1985, 1986 by Xerox Corporation.  All rights reserved.
")

(PRETTYCOMPRINT AARITHCOMS)

(RPAQQ AARITHCOMS 
       [(FNS LOG ANTILOG SIN ARCSIN COS ARCCOS TAN ARCTAN ARCTAN2 ATAN FEXPT \SIN-FLOAT \TAN-FLOAT 
             \SIN.OLD \COS.OLD \TAN.OLD)
        (VARS \ANTILOGARRAY \ANTILOGCARRAY \ARCTANARRAY \LOGARRAY \SIN-PPOLY \SIN-QPOLY \TAN-PPOLY 
              \TAN-QPOLY \SINARRAY1 \SINARRAY2 \TANARRAY \ATANARRAY)
        (DECLARE: EVAL@COMPILE DONTCOPY (MACROS (* now obsolete - use POLYEVAL instead)
                                               HORNERIFY FLEQ FGEQ)
               (FILES (LOADCOMP)
                      LLFLOAT)
               (CONSTANTS (\SIN-EPSILON .0002441406)
                      (\EXPONENT.BIAS 127)
                      (2PI 6.283185)
                      (PI 3.141593)
                      (-PI -3.141593)
                      (-PI/2 -1.570796)
                      (PI/2 1.570796)
                      (4/PI 1.273239)
                      (3PI/2 4.712389)
                      (PI/4 .7853982)
                      (-PI/4 -.7853982)
                      (PI/180 .01745329)
                      (180/PI 57.29578)
                      (-PI/2 -1.570796)
                      (LN2 .6931472)
                      (2↑-126 1.175494E-38])
(DEFINEQ

(LOG
  [LAMBDA (X)                                                (* hdj "11-Feb-85 17:14")
    (DECLARE (GLOBALVARS \LOGARRAY))
    (PROG ((SX (OR (FLOATP X)
                   (FLOAT X)))
           (EXP 0)
           SSUM)
          (if (NOT (FGREATERP SX 0.0))
              then (ERROR "LOG OF NON-POSITIVE NUMBER:" X))
          [if (EQ 0 (fetch (FLOATP EXPONENT) of SX))
              then 
          
          (* * Don't really need to consider unnormalized numbers, but there is a bug in 
          Interlisp-D's floating point arithmetic as of 3/17/84 regarding zero exponent.)

                   (SETQ EXP (while (FLESSP SX 2↑-126) count (SETQ SX (FTIMES SX 2.0]
          (if (EQ SX X)
              then                                           (* Need smashable copy)
                   (SETQ SX (\FLOAT.BOX X)))
          (SETQ EXP (IDIFFERENCE (IDIFFERENCE (fetch (FLOATP EXPONENT) of SX)
                                        \EXPONENT.BIAS)
                           EXP))
          
          (* * Depends on Interlisp-D's use of IEEE 32 bit float format internally and 
          smashes the number to the range 1 to 2 and saves the exponent)

          (replace (FLOATP EXPONENT) of SX with \EXPONENT.BIAS)
          (SETQ SX (FDIFFERENCE SX 1.0))
          (SETQ SSUM (POLYEVAL SX \LOGARRAY 8))
          
          (* * Polynomial from Handbook of Mathematical Functions
          (edited by Aramowitz) page 69 accuracy 28 bits
          (of the 24 available!))

          (RETURN (FPLUS SSUM (FTIMES LN2 EXP])

(ANTILOG
  [LAMBDA (X)                                                (* JAS "19-Jul-85 11:55")
    (DECLARE (GLOBALVARS \ANTILOGARRAY \ANTILOGCARRAY))
    (PROG ((XX (FLOAT X))
           FRAC IP SSUM YY)
          (DECLARE (TYPE FLOATING XX FRAC SSUM YY))
          (SETQ YY (FABS XX))
          [COND
             ((GREATERP YY 88.7)
              (COND
                 ((LESSP XX 0)
                  (RETURN 0.0))
                 (T (ERROR "FLOATING OVERFLOW" X]
          [SETQ FRAC (FDIFFERENCE YY (FTIMES (CONSTANT (LOG 2))
                                            (SETQ IP (FIX (FTIMES YY (CONSTANT (FQUOTIENT
                                                                                1.0
                                                                                (LOG 2]
          (SETQ SSUM (POLYEVAL FRAC \ANTILOGARRAY 7))
          
          (* * Polynomial from Handbook of Mathematical Functions
          (edited by Aramowitz) page 71 accuracy 32 bits of the 24 available!)
                                                             (* SSUM is in the range .5 to 2
                                                             (and series produced .5 to 1))
          [SETQ SSUM (QUOTIENT SSUM (ELT \ANTILOGCARRAY (IPLUS IP 127]
          (RETURN (if (FGREATERP XX 0.0)
                      then (FQUOTIENT 1.0 SSUM)
                    else SSUM])

(SIN
  [LAMBDA (X RADIANSFLG)                                     (* FS "15-Oct-86 19:56")
    (PROG ((XX X))
          (DECLARE (TYPE FLOATP XX))
          (if RADIANSFLG
              then (RETURN (\SIN-FLOAT XX))
            else (RETURN (\SIN-FLOAT (FTIMES PI/180 XX])

(ARCSIN
  [LAMBDA (X RADIANSFLG)                                     (* JonL "30-Mar-84 23:59")
    (PROG ((XX (OR (FLOATP X)
                   (FLOAT X)))
           SSUM NEGP REDUCED Z Q1 Q2)
          (if (OR (FLESSP XX -1.0)
                  (FGREATERP XX 1.0))
              then (ERROR "ARCSIN: arg not in range" XX)
            elseif (FLESSP XX 0.0)
              then (SETQ NEGP T)
                   (SETQ XX (FDIFFERENCE 0.0 XX)))
          [if (FGREATERP XX .5)
              then (SETQ REDUCED T)
                   (SETQ XX (SQRT (FTIMES .5 (FDIFFERENCE 1.0 XX]
                                                             (* Special case for small magnitude 
                                                             arguments, from Computer Evaluation of 
                                                             Mathematical Funcitons
                                                             (by C. T. Fike) page 57)
          (SETQ Z (FTIMES XX XX))
          (SETQ Q1 (FTIMES .5315066 Z))
          (SETQ Q2 (FTIMES (SETQ Q2 (FDIFFERENCE Q1 .08982446))
                          Q2))
          [SETQ Q2 (FPLUS .3697723 (FTIMES Q2 (FPLUS .4918762 Q2]
          [SETQ SSUM (FTIMES XX (FPLUS .7533057 (FTIMES Q2 (FPLUS .6599526 Q1]
          [if REDUCED
              then (SETQ SSUM (FDIFFERENCE PI/2 (FTIMES 2.0 SSUM]
          (if NEGP
              then (SETQ SSUM (FDIFFERENCE 0.0 SSUM)))
          (RETURN (if RADIANSFLG
                      then SSUM
                    else (FTIMES SSUM 180/PI])

(COS
  [LAMBDA (X RADIANSFLG)                                     (* FS "15-Oct-86 19:58")
    (PROG ((XX X))
          (DECLARE (TYPE FLOATP XX))
          (if RADIANSFLG
              then (RETURN (\SIN-FLOAT XX T))
            else (RETURN (\SIN-FLOAT (FTIMES PI/180 XX)
                                T])

(ARCCOS
  [LAMBDA (X RADIANSFLG)                                     (* JonL "30-Mar-84 20:21")
    (PROG [(XX (OR (FLOATP X)
                   (FLOAT X]
          (RETURN (FDIFFERENCE (if RADIANSFLG
                                   then PI/2
                                 else 90.0)
                         (ARCSIN XX RADIANSFLG])

(TAN
  [LAMBDA (X RADIANSFLG)                                     (* FS "17-Oct-86 18:20")
    (PROG ((XX X))
          (DECLARE (TYPE FLOATP XX))
          (if RADIANSFLG
              then (RETURN (\TAN-FLOAT XX))
            else (RETURN (\TAN-FLOAT (FTIMES PI/180 XX])

(ARCTAN
  [LAMBDA (X RADIANSFLG)                                     (* hdj "11-Feb-85 17:24")
    (DECLARE (GLOBALVARS \ARCTANARRAY))
    (PROG ((XX (FPLUS X 0.0))
           (SSUM .002866226)
           X2 FLIPPED)                                       (* POLYNOMIAL FROM HANDBOOK OF 
                                                             MATHEMATICAL FUNCTIONS
                                                             (EDITED BY ARAMOWITZ) PAGE 81 ACCURACY 
                                                             28 BITS)
          (if (OR (FLESSP XX -1.0)
                  (FGREATERP XX 1.0))
              then (SETQ FLIPPED (if (FLESSP XX 0.0)
                                     then -PI/2
                                   else PI/2))
                   (SETQ XX (FQUOTIENT 1.0 XX)))
          (SETQ X2 (FTIMES XX XX))
          (SETQ SSUM (FTIMES XX (POLYEVAL X2 \ARCTANARRAY 8)))
          (if FLIPPED
              then (SETQ SSUM (FDIFFERENCE FLIPPED SSUM)))
          (RETURN (if RADIANSFLG
                      then SSUM
                    else (FTIMES SSUM 180/PI])

(ARCTAN2
  [LAMBDA (Y X RADIANSFLG)                                   (* JonL "17-Mar-84 21:41")
    (OR (FLOATP Y)
        (SETQ Y (FLOAT Y)))
    (OR (FLOATP X)
        (SETQ X (FLOAT X)))
    (PROG ((ANGLE (ARCTAN (ABS (FQUOTIENT Y X))
                         T)))
          (SETQ ANGLE (if (FLESSP X 0.0)
                          then (if (FLESSP Y 0.0)
                                   then                      (* Quadrant 3)
                                        (FPLUS -PI ANGLE)
                                 else                        (* Quadrant 2)
                                      (FDIFFERENCE PI ANGLE))
                        else (if (FLESSP Y 0.0)
                                 then                        (* Quadrant 4)
                                      (FDIFFERENCE 0.0 ANGLE)
                               else                          (* Quadrant 1)
                                    ANGLE)))
          (RETURN (if RADIANSFLG
                      then ANGLE
                    else (FTIMES ANGLE 180/PI])

(ATAN
  [LAMBDA (Y X RADIANSFLG)                                   (* hdj "11-Feb-85 17:26")
                                                             (* version of arctan which returns 
                                                             value in radians between 0 and 2 PI.
                                                             Copied from the PDP-10 MacLisp machine 
                                                             language code.)
    (OR (FLOATP Y)
        (SETQ Y (FLOAT Y)))
    (OR (FLOATP X)
        (SETQ X (FLOAT X)))
    (DECLARE (GLOBALVARS \ATANARRAY))
    (PROG ((Y.NEGP (FLESSP Y 0.0))
           (X.NEGP (FLESSP X 0.0))
           ATAN.Y ATAN.X T. TT D R (ANS -.004054058))
          (SETQ ATAN.Y (if Y.NEGP
                           then (FDIFFERENCE 0.0 Y)
                         else Y))
          (SETQ ATAN.X (if X.NEGP
                           then (FDIFFERENCE 0.0 X)
                         else X))
          (SETQ T. (FQUOTIENT (FDIFFERENCE ATAN.Y ATAN.X)
                          (FPLUS ATAN.Y ATAN.X)))
          (SETQ R (FTIMES T. T.))
          (SETQ D (FTIMES T. (POLYEVAL R \ATANARRAY 7)))
          (SETQ TT (if (FLESSP D 0.0)
                       then (FDIFFERENCE 0.0 D)
                     else D))
          [SETQ D (if (OR (FGEQ TT .7855)
                          (FLESSP TT .7853))
                      then (FPLUS D .7853982)
                    elseif (FLESSP D 0.0)
                      then                                   (* When the rational approximation is 
                                                             not very good, we can patch it up by 
                                                             using Y/X and an approximation for
                                                             (ARCTAN Y/X))
                           (FQUOTIENT ATAN.Y ATAN.X)
                    else                                     (* Corresponds to label ATAN.2)
                         (FPLUS PI/2 (FQUOTIENT (FDIFFERENCE 0.0 ATAN.X)
                                            ATAN.Y]
      ATAN.4
                                                             (* We now have a quadrant-1 result;
                                                             patch it up to get other quadrant 
                                                             values.)
          (SETQ D (if X.NEGP
                      then (if Y.NEGP
                               then                          (* Quadrant 3)
                                    (FPLUS PI D)
                             else                            (* Quadrant 2)
                                  (FDIFFERENCE PI D))
                    else (if Y.NEGP
                             then                            (* Quadrant 4)
                                  (FDIFFERENCE 2PI D)
                           else                              (* Quadrant 1)
                                D)))
          (RETURN (if RADIANSFLG
                      then D
                    else (FTIMES D 180/PI])

(FEXPT
  [LAMBDA (A N)                                              (* JAS "29-Jul-85 15:13")
                                                             (* In addition to coercing the args to 
                                                             floating-point, this handles the case 
                                                             of negative values for N)
    (COND
       ((EQP A 0.0)
        0.0)
       (T (ANTILOG (FTIMES (OR (FLOATP N)
                               (FLOAT N))
                          (LOG (OR (FLOATP A)
                                   (FLOAT A])

(\SIN-FLOAT
  [LAMBDA (X COS-FLAG)                                       (* FS "15-Oct-86 19:52")
          
          (* * SIN of a FLOAT X calculated via SIN 3374 rational approximation of Harris 
          et al. *)

    (PROG (R SIGN R2 ANSWER)
          (DECLARE (GLOBALVARS \SIN-PPOLY \SIN-QPOLY)
                 (TYPE FLOATP X R SIGN R2 ANSWER))
          
          (* * If this function called by COS then use
          (COS X) = (SIN (minus PI/2 X)) = (SIN (+ PI/2 X)) Case out on sign of X for 
          improved numerical stability. Avoids unnecessary rounding and promotes 
          symmetric properties. (COS X) = (COS (minus X)) is guaranteed by this strategy.
          *)

          [SETQ R (COND
                     ((NOT COS-FLAG)
                      X)
                     ((> X 0)
                      (- PI/2 X))
                     (T (+ PI/2 X]
          
          (* * First range reduce to (0 infinity) by
          (SIN (minus X)) = (minus (SIN X)) This strategy guarantees
          (SIN (minus X)) = (minus (SIN X)) *)

          (COND
             ((< R 0)
              (SETQ SIGN -1.0)
              (SETQ R (- R)))
             (T (SETQ SIGN 1.0)))
          
          (* * Next range reduce to interval (0 2PI) by
          (SIN X) = (SIN (MOD X 2PI)) . *)

          (SETQ R (REM R 2PI))
          
          (* * Next range reduce to interval (0 PI) by
          (SIN (+ X PI)) = (minus (SIN X)) *)

          [COND
             ((> R PI)
              (SETQ SIGN (- SIGN))
              (SETQ R (- R PI]
          
          (* * Next range reduce to interval (0 PI/2) by
          (SIN (+ X PI/2)) = (SIN (minus PI/2 X)) *)

          [COND
             ((> R PI/2)
              (SETQ R (- PI R]
          [COND
             ((< R \SIN-EPSILON)
          
          (* * If R is in the interval (0 %%SIN-EPSILON) then
          (SIN R) = R to the precision that we can offer.
          Return R because (1) it is desirable that
          (SIN R) = R exactly for small R and (2) microcode POLYEVAL will underflow on 
          sufficiently small positive R. *)

              (RETURN (FTIMES SIGN R]
          
          (* * Now use SIN 3374 rational approximation of Harris et al.
          which works on interval (0 %%PI/2) *)

          (SETQ R2 (FTIMES R R))
          [SETQ ANSWER (FTIMES SIGN R (/ (POLYEVAL R2 \SIN-PPOLY 5)
                                         (POLYEVAL R2 \SIN-QPOLY 5]
          (RETURN ANSWER])

(\TAN-FLOAT
  [LAMBDA (X)                                                (* FS "17-Oct-86 18:18")
          
          (* * TAN of a FLOAT X calculated via TAN 4288 rational approximation of Harris 
          et al. *)

    (PROG (R SIGN RECIPFLG R2 ANSWER)
          (DECLARE (GLOBALVARS %%TAN-PPOLY %%TAN-QPOLY)
                 (TYPE FLOATP X R R2 ANSWER))
          (SETQ R X)
          
          (* * First range reduce to (0 infinity) by
          (TAN (minus X)) = (minus (TAN X)) *)

          (COND
             ((< R 0)
              (SETQ SIGN -1.0)
              (SETQ R (- R)))
             (T (SETQ SIGN 1.0)))
          
          (* * Next range reduce to (0 PI) *)

          (SETQ R (REM R %%PI))
          
          (* * Next, range reduce to (-PI/4 PI/4) using
          (TAN X) = (TAN (minus X PI)) to get into interval
          (-PI/2 PI/2) and then (TAN X) = (/ (TAN (minus PI/2 X))) to get into interval
          (-PI/4 PI/4) *)

          [COND
             [(> R %%PI/2)
              (SETQ R (- R %%PI))
              (COND
                 ((< R %%-PI/4)
                  (SETQ RECIPFLG T)
                  (SETQ R (- %%-PI/2 R]
             (T (COND
                   ((> R %%PI/4)
                    (SETQ RECIPFLG T)
                    (SETQ R (- %%PI/2 R]
          (COND
             ((< (ABS R)
               %%TAN-EPSILON)
          
          (* * If R is in the interval (0 %%TAN-EPSILON) then
          (TAN R) = R to the precision that we can offer.
          Return R because (1) it is desirable that
          (TAN R) = R exactly for small R and (2) microcode POLYEVAL will underflow on 
          sufficiently small positive R. *)

              (SETQ ANSWER (CL:* SIGN R))
              [COND
                 (RECIPFLG (SETQ ANSWER (/ ANSWER]
              (RETURN ANSWER)))
          
          (* * Now use TAN 4288 rational approximation of Harris et al.
          which works on interval (0 %%PI/4) *)

          (SETQ R2 (CL:* R R))
          [SETQ ANSWER (CL:* SIGN R (/ (POLYEVAL R2 %%TAN-PPOLY 4)
                                       (POLYEVAL R2 %%TAN-QPOLY 5]
          [COND
             (RECIPFLG (SETQ ANSWER (/ ANSWER]
          (RETURN ANSWER])

(\SIN.OLD
  [LAMBDA (X RADIANSFLG)                                     (* FS "15-Oct-86 19:35")
    (DECLARE (GLOBALVARS \SINARRAY1 \SINARRAY2))
          
          (* * Old version, claimed less accurate -FS)

    (PROG ((XX X)
           X2)
          (DECLARE (TYPE FLOATP XX X2))
          (if RADIANSFLG
              then (if [OR (FGEQ XX 2PI)
                           (FLEQ XX (CONSTANT (MINUS 2PI]
                       then (SETQ XX (FREMAINDER XX 2PI)))
            else (if (OR (FGEQ XX 360.0)
                         (FLEQ XX -360.0))
                     then (SETQ XX (FREMAINDER XX 360.0)))
                 (SETQ XX (FTIMES PI/180 XX)))
          (if (FLESSP XX -PI/2)
              then (SETQ XX (FPLUS XX 2PI)))
          (if (FGREATERP XX 3PI/2)
              then (SETQ XX (FDIFFERENCE XX 2PI))
            elseif (FGREATERP XX PI/2)
              then (SETQ XX (FDIFFERENCE PI XX)))            (* Range-reduce to between 0 and PI/2)
          (RETURN (if (FGEQ XX PI/4)
                      then (SETQ X2 (FTIMES XX XX))          (* Polynomial from Handbook of 
                                                             Mathematical Functions
                                                             (edited by Aramowitz) page 76 accuracy 
                                                             26 bits (of the 24 available!))
                           (SETQ X2 (FTIMES XX (POLYEVAL X2 \SINARRAY1 5)))
                    else (SETQ XX (FTIMES 4/PI XX))
                         (SETQ X2 (FTIMES XX XX))            (* Chebyshev approximation from 
                                                             Computer Evaluation of Mathematical 
                                                             Functions (by C. T. Fike) Page 117)
                         (SETQ X2 (FTIMES XX (POLYEVAL X2 \SINARRAY2 3])

(\COS.OLD
  [LAMBDA (X RADIANSFLG)                                     (* FS "15-Oct-86 19:57")
    (PROGN (DECLARE (GLOBALVARS \SINARRAY1 \SINARRAY2))
           (PROG ((XX X)
                  X2)
                 (DECLARE (TYPE FLOATP XX X2))
                 (if RADIANSFLG
                     then (if [OR (FGEQ XX 2PI)
                                  (FLEQ XX (CONSTANT (MINUS 2PI]
                              then (SETQ XX (FREMAINDER XX 2PI)))
                   else (if (OR (FGEQ XX 360.0)
                                (FLEQ XX -360.0))
                            then (SETQ XX (FREMAINDER XX 360.0)))
                        (SETQ XX (FTIMES PI/180 XX)))
                 (SETQ XX (FDIFFERENCE PI/2 XX))
                 (if (FLESSP XX -PI/2)
                     then (SETQ XX (FPLUS XX 2PI)))
                 (if (FGREATERP XX 3PI/2)
                     then (SETQ XX (FDIFFERENCE XX 2PI))
                   elseif (FGREATERP XX PI/2)
                     then (SETQ XX (FDIFFERENCE PI XX)))     (* Range-reduce to between 0 and PI/2)
                 (RETURN (if (FGEQ XX PI/4)
                             then (SETQ X2 (FTIMES XX XX))   (* Polynomial from Handbook of 
                                                             Mathematical Functions
                                                             (edited by Aramowitz) page 76 accuracy 
                                                             26 bits (of the 24 available!))
                                  (SETQ X2 (FTIMES XX (POLYEVAL X2 \SINARRAY1 5)))
                           else (SETQ XX (FTIMES 4/PI XX))
                                (SETQ X2 (FTIMES XX XX))     (* Chebyshev approximation from 
                                                             Computer Evaluation of Mathematical 
                                                             Functions (by C. T. Fike) Page 117)
                                (SETQ X2 (FTIMES XX (POLYEVAL X2 \SINARRAY2 3])

(\TAN.OLD
  [LAMBDA (X RADIANSFLG)                                     (* FS "17-Oct-86 18:19")
    (DECLARE (GLOBALVARS \TANARRAY))
    (PROG ((XX X)
           FLIPPED Y X2)
          (DECLARE (TYPE FLOATP XX Y X2))
          (SETQ XX (if RADIANSFLG
                       then (FREMAINDER XX PI)
                     else (FTIMES (FREMAINDER XX 180.0)
                                 PI/180)))
          (DECLARE (TYPE FLOATP XX Y X2))                    (* First, normalize to between -PI and 
                                                             PI)
          (if (FGREATERP XX PI/2)
              then (SETQ XX (FDIFFERENCE XX PI))
            elseif (FLESSP XX -PI/2)
              then (SETQ XX (FPLUS XX PI)))                  (* Then normalize to between -PI/2 and 
                                                             PI/2)
          (SETQ Y (if (FGREATERP XX PI/4)
                      then (SETQ FLIPPED T)
                           (FDIFFERENCE PI/2 XX)
                    elseif (FLESSP XX -PI/4)
                      then (SETQ FLIPPED T)
                           (FDIFFERENCE -PI/2 XX)
                    else XX))
          (SETQ X2 (FTIMES Y Y))
          (SETQ Y (FTIMES Y (POLYEVAL X2 \TANARRAY 6)))      (* POLYNOMIAL APPROXIMATION FROM 
                                                             HANDBOOK OF MATHEMATICAL FUNCTIONS
                                                             (EDITED BY ABRAMOWITZ) PAGE 76 GOOD TO 
                                                             ALMOST 26 BITS)
          (RETURN (if FLIPPED
                      then (SETQ Y (FQUOTIENT 1.0 Y))
                    else Y])
)

(RPAQ \ANTILOGARRAY (READARRAY 8 (QUOTE FLOATP) 0))
(-.0001413161 .001329882 -.00830136 .04165735 -.1666653 .4999999 -1.0 1.0 NIL
)

(RPAQ \ANTILOGCARRAY (READARRAY 255 (QUOTE FLOATP) 0))
(5.877474E-39 1.175494E-38 2.350992E-38 4.70198E-38 9.40396E-38 1.880791E-37 3.761582E-37 7.523175E-37
 1.504633E-36 3.009266E-36 6.018532E-36 1.203706E-35 2.407413E-35 4.814832E-35 9.629656E-35 
1.92593E-34 3.85186E-34 7.70372E-34 1.540746E-33 3.081488E-33 6.162979E-33 1.232595E-32 2.465191E-32 
4.930382E-32 9.860764E-32 1.972152E-31 3.944305E-31 7.888613E-31 1.577722E-30 3.155448E-30 
6.310891E-30 1.262178E-29 2.524355E-29 5.04871E-29 1.009743E-28 2.019484E-28 4.038968E-28 8.077936E-28
 1.615587E-27 3.231174E-27 6.462349E-27 1.29247E-26 2.58494E-26 5.169879E-26 1.033976E-25 2.067952E-25
 4.135903E-25 8.271806E-25 1.654361E-24 3.308724E-24 6.617445E-24 1.323489E-23 2.646978E-23 
5.293956E-23 1.058791E-22 2.117583E-22 4.235165E-22 8.47033E-22 1.694066E-21 3.388132E-21 6.776264E-21
 1.355253E-20 2.710506E-20 5.421011E-20 1.084202E-19 2.168405E-19 4.336809E-19 8.67363E-19 
1.734724E-18 3.469447E-18 6.938904E-18 1.387779E-17 2.775558E-17 5.551115E-17 1.110223E-16 
2.220446E-16 4.440892E-16 8.881784E-16 1.776359E-15 3.552714E-15 7.105429E-15 1.421086E-14 
2.842171E-14 5.684342E-14 1.136868E-13 2.273737E-13 4.547474E-13 9.094948E-13 1.818989E-12 
3.637979E-12 7.275959E-12 1.455192E-11 2.910383E-11 5.820766E-11 1.164153E-10 2.328307E-10 
4.656613E-10 9.31324E-10 1.862645E-9 3.72529E-9 7.450583E-9 1.490116E-8 2.980232E-8 5.960465E-8 
1.192093E-7 2.384186E-7 4.768372E-7 9.536744E-7 1.907349E-6 3.814697E-6 7.629397E-6 .00001525879 
.00003051759 .00006103516 .0001220703 .0002441406 .0004882813 .0009765626 .001953125 .00390625 
.0078125 .015625 .03125 .0625 .125 .25 .5 1.0 2.0 4.0 8.0 16.0 32.0 64.0 128.0 256.0 512.0 1024.0 
2048.0 4096.0 8192.0 16384.0 32768.0 65536.0 131072.0 262144.0 524288.0 1048576.0 2097152.0 4194304.0 
8388608.0 16777220.0 33554430.0 67108870.0 1.342177E8 2.684355E8 5.368709E8 1.073742E9 2.147484E9 
4.294968E9 8.589936E9 1.717987E10 3.435974E10 6.871948E10 1.37439E11 2.748779E11 5.497558E11 
1.099512E12 2.199023E12 4.398047E12 8.796094E12 1.759219E13 3.518437E13 7.036876E13 1.407375E14 
2.81475E14 5.6295E14 1.1259E15 2.2518E15 4.5036E15 9.0072E15 1.80144E16 3.60288E16 7.205761E16 
1.441152E17 2.882304E17 5.764609E17 1.152922E18 2.305843E18 4.611686E18 9.223372E18 1.844675E19 
3.689349E19 7.378698E19 1.47574E20 2.951479E20 5.902958E20 1.180592E21 2.361183E21 4.722367E21 
9.444734E21 1.888947E22 3.777893E22 7.555786E22 1.511157E23 3.022315E23 6.044629E23 1.208926E24 
2.417852E24 4.835703E24 9.671406E24 1.934281E25 3.868563E25 7.737125E25 1.547425E26 3.09485E26 
6.1897E26 1.23794E27 2.47588E27 4.95176E27 9.90352E27 1.980704E28 3.961408E28 7.922816E28 1.584563E29 
3.169126E29 6.338253E29 1.267651E30 2.535301E30 5.070602E30 1.01412E31 2.028241E31 4.056482E31 
8.112964E31 1.622593E32 3.245186E32 6.490371E32 1.298074E33 2.596148E33 5.192297E33 1.038459E34 
2.076919E34 4.153837E34 8.307675E34 1.661535E35 3.32307E35 6.64614E35 1.329228E36 2.658456E36 
5.316912E36 1.063382E37 2.126765E37 4.25353E37 8.50706E37 1.701412E38 NIL
)

(RPAQ \ARCTANARRAY (READARRAY 9 (QUOTE FLOATP) 0))
(.002866226 -.01616574 .04290961 -.07528964 .1065626 -.142089 .1999355 -.3333315 1.0 NIL
)

(RPAQ \LOGARRAY (READARRAY 9 (QUOTE FLOATP) 0))
(-.006453544 .03608849 -.0953294 .1676541 -.2407338 .331799 -.4998741 .9999964 0.0 NIL
)

(RPAQ \SIN-PPOLY (READARRAY 6 (QUOTE FLOATP) 0))
(-1.312516E-9 5.565546E-7 -.00008703754 .005830397 -.1509093 1.0 NIL
)

(RPAQ \SIN-QPOLY (READARRAY 6 (QUOTE FLOATP) 0))
(3.535755E-12 1.995733E-9 6.131296E-7 .0001232982 .01575741 1.0 NIL
)

(RPAQ \TAN-PPOLY (READARRAY 5 (QUOTE FLOATP) 0))
(8.443456E-8 -.00003939664 .004337587 -.140375 1.0 NIL
)

(RPAQ \TAN-QPOLY (READARRAY 6 (QUOTE FLOATP) 0))
(-1.539329E-9 2.275635E-6 -.0004822159 .02890704 -.4737084 1.0 NIL
)

(RPAQ \SINARRAY1 (READARRAY 6 (QUOTE FLOATP) 0))
(-2.39E-8 2.7526E-6 -.000198409 .008333332 -.1666667 1.0 NIL
)

(RPAQ \SINARRAY2 (READARRAY 4 (QUOTE FLOATP) 0))
(-.0000359544 .002490007 -.08074545 .7853982 NIL
)

(RPAQ \TANARRAY (READARRAY 7 (QUOTE FLOATP) 0))
(.00951681 .002900525 .02456509 .05337406 .1333924 .3333314 1.0 NIL
)

(RPAQ \ATANARRAY (READARRAY 8 (QUOTE FLOATP) 0))
(-.004054058 .02186123 -.05590989 .09642004 -.1390853 .1994654 -.3332986 .9999994 NIL
)
(DECLARE: EVAL@COMPILE DONTCOPY 
(DECLARE: EVAL@COMPILE 

[PUTPROPS HORNERIFY MACRO (X (PROG ((INITIAL (CAR X))
                                    (VARNAME (CADR X))
                                    (COEFFICIENTS (CDDR X))
                                    TERM)
                                   (OR COEFFICIENTS (SHOULDNT))
                                   (OR (AND (LITATOM VARNAME)
                                            VARNAME
                                            (NEQ T VARNAME))
                                       (\ILLEGAL.ARG VARNAME))
                                   (SETQ TERM (LIST (QUOTE FPLUS)
                                                    (LIST (QUOTE FTIMES)
                                                          INITIAL VARNAME)
                                                    (CAR COEFFICIENTS)))
                                   (OR (CONSTANTEXPRESSIONP (CAR COEFFICIENTS))
                                       (ARGS.COMMUTABLEP (CAR COEFFICIENTS)
                                              (CADR TERM))
                                       (LISPERROR X 
                                              "Can't hack non-commutable coefficient expressions"))
                                   (RETURN (COND ((NULL (CDR COEFFICIENTS))
                                                  TERM)
                                                 (T (CONS (QUOTE HORNERIFY)
                                                          (CONS TERM (CONS VARNAME (CDR COEFFICIENTS]
[PUTPROPS FLEQ MACRO ((X Y)
                      (NOT (FGREATERP X Y]
[PUTPROPS FGEQ MACRO ((X Y)
                      (NOT (FLESSP X Y]
)

(FILESLOAD (LOADCOMP)
       LLFLOAT)

(DECLARE: EVAL@COMPILE 

(RPAQQ \SIN-EPSILON .0002441406)

(RPAQQ \EXPONENT.BIAS 127)

(RPAQQ 2PI 6.283185)

(RPAQQ PI 3.141593)

(RPAQQ -PI -3.141593)

(RPAQQ -PI/2 -1.570796)

(RPAQQ PI/2 1.570796)

(RPAQQ 4/PI 1.273239)

(RPAQQ 3PI/2 4.712389)

(RPAQQ PI/4 .7853982)

(RPAQQ -PI/4 -.7853982)

(RPAQQ PI/180 .01745329)

(RPAQQ 180/PI 57.29578)

(RPAQQ -PI/2 -1.570796)

(RPAQQ LN2 .6931472)

(RPAQQ %2↑-126 1.175494E-38)

(CONSTANTS (\SIN-EPSILON .0002441406)
       (\EXPONENT.BIAS 127)
       (2PI 6.283185)
       (PI 3.141593)
       (-PI -3.141593)
       (-PI/2 -1.570796)
       (PI/2 1.570796)
       (4/PI 1.273239)
       (3PI/2 4.712389)
       (PI/4 .7853982)
       (-PI/4 -.7853982)
       (PI/180 .01745329)
       (180/PI 57.29578)
       (-PI/2 -1.570796)
       (LN2 .6931472)
       (2↑-126 1.175494E-38))
)
)
(PUTPROPS AARITH COPYRIGHT ("Xerox Corporation" 1981 1983 1984 1985 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1653 24660 (LOG 1663 . 3310) (ANTILOG 3312 . 4750) (SIN 4752 . 5060) (ARCSIN 5062 . 
6676) (COS 6678 . 7023) (ARCCOS 7025 . 7391) (TAN 7393 . 7701) (ARCTAN 7703 . 8877) (ARCTAN2 8879 . 
10011) (ATAN 10013 . 13272) (FEXPT 13274 . 13906) (\SIN-FLOAT 13908 . 16492) (\TAN-FLOAT 16494 . 18789
) (\SIN.OLD 18791 . 20767) (\COS.OLD 20769 . 22870) (\TAN.OLD 22872 . 24658)))))
STOP