(FILECREATED "28-Jul-86 14:17:15" ("compiled on " {ERIS}CML>CMLFLOAT.;21) "23-Jul-86 04:26:56" "COMPILE-FILEd" in "Xerox Lisp 23-Jul-86 ..." dated "23-Jul-86 04:52:47") (FILECREATED "28-Jul-86 14:12:13" {ERIS}CML>CMLFLOAT.;21 80481 changes to: (VARS CMLFLOATCOMS) (FNS CL:SQRT %%SQRT-COMPLEX) previous date: "23-Jul-86 18:31:49" {ERIS}CML>CMLFLOAT.;20) (RPAQQ CMLFLOATCOMS ((* * CMLFLOAT -- Covering sections 12.5-12.5.3 irrational, transcendental, exponential, logarithmic, trigonometric, and hyperbolic functions. Section 12.10, implementation parameters. -- By Kelly Roach. *) (COMS (* Section 12.10, implementation parameters. The constants in this COMS are exported to the user. *) (* %%FLOAT allows us to recreate FLOATPs in a way that is independent of the ordinairy reading and printing FLOATPs to files which involves loss of the last couple bits of accuracy due to rounding effects. *) (FNS %%FLOAT) (CONSTANTS (MOST-POSITIVE-FIXNUM 65535) (MOST-NEGATIVE-FIXNUM -65536) (MOST-POSITIVE-SINGLE-FLOAT (%%FLOAT 32639 65535)) ( LEAST-POSITIVE-SINGLE-FLOAT (%%FLOAT 128 0)) (LEAST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 32896 0)) ( MOST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 65407 65535)) (MOST-POSITIVE-SHORT-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (LEAST-POSITIVE-SHORT-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) ( LEAST-NEGATIVE-SHORT-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (MOST-NEGATIVE-SHORT-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) (MOST-POSITIVE-DOUBLE-FLOAT MOST-POSITIVE-SINGLE-FLOAT) ( LEAST-POSITIVE-DOUBLE-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (LEAST-NEGATIVE-DOUBLE-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (MOST-NEGATIVE-DOUBLE-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) ( MOST-POSITIVE-LONG-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (LEAST-POSITIVE-LONG-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (LEAST-NEGATIVE-LONG-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) ( MOST-NEGATIVE-LONG-FLOAT MOST-NEGATIVE-SINGLE-FLOAT)) (* EPSILON is the smallest positive floating point number such that (NOT (= (FLOAT 1 EPSILON) (+ (FLOAT 1 EPSILON) EPSILON))) *) (CONSTANTS ( SINGLE-FLOAT-EPSILON (%%FLOAT 13312 0)) (SHORT-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) ( DOUBLE-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) (LONG-FLOAT-EPSILON SINGLE-FLOAT-EPSILON)) (* NEGATIVE-EPSILON is the smallest negative floating point number such that (NOT (= (FLOAT 1 NEGATIVE-EPSILON) (- (FLOAT 1 NEGATIVE-EPSILON) NEGATIVE-EPSILON))) *) (CONSTANTS ( SINGLE-FLOAT-NEGATIVE-EPSILON (%%FLOAT 13184 0)) (SHORT-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) (DOUBLE-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) ( LONG-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON))) (COMS (* Miscellaneous. *) (DECLARE: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) LLFLOAT)) (CONSTANTS (PI (%%FLOAT 16457 4059))) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%E (%%FLOAT 16429 63572)) (%%2PI (%%FLOAT 16585 4059)) (%%PI ( %%FLOAT 16457 4059)) (%%2PI/3 (%%FLOAT 16390 2706)) (%%PI/2 (%%FLOAT 16329 4059)) (%%-PI/2 (%%FLOAT 49097 4059)) (%%PI/3 (%%FLOAT 16262 2706)) (%%PI/4 (%%FLOAT 16201 4059)) (%%-PI/4 (%%FLOAT 48969 4059) ) (%%PI/6 (%%FLOAT 16134 2706)) (%%2/PI (%%FLOAT 16162 63875)))) (FNS %%MAKE-ARRAY)) (COMS (* EXP *) ( COMS (CONSTANTS (%%LOG-BASE2-E (%%FLOAT 16312 43579))) (* * %%EXP-POLY contains P and Q coefficients of Harris et al EXPB 1103 rational approximation to (EXPT 2 X) in interval (0 .125) %. %%EXP-TABLE contains values of powers (EXPT 2 (/ N 8)) . *) (VARS (%%EXP-POLY (%%MAKE-ARRAY (LIST (%%FLOAT 15549 17659) (%%FLOAT 16256 0) (%%FLOAT 16801 38273) (%%FLOAT 17257 7717) (%%FLOAT 17597 11739) (%%FLOAT 17800 30401)))) (%%EXP-TABLE (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 16267 38338) (%%FLOAT 16280 14320) (%%FLOAT 16293 65239) (%%FLOAT 16309 1267) (%%FLOAT 16325 26410) (%%FLOAT 16343 17661) ( %%FLOAT 16362 49351)))))) (FNS EXP %%EXP-FLOAT %%EXP-COMPLEX)) (COMS (* EXPT *) (FNS CL:EXPT %%EXPT-INTEGER %%EXPT-FLOAT %%EXPT-COMPLEX %%EXPT-COMPLEX-POWER)) (COMS (* LOG *) (COMS (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%LOG2 (%%FLOAT 16177 29208)) (%%SQRT2 (%%FLOAT 16309 1267)))) (* * %%LOG-PPOLY and %%LOG-QPOLY contain P and Q coefficients of Harris et al LOGE 2707 rational approximation to (LOG X) in interval ((SQRT .5) (SQRT 2)) . *) (VARS (%%LOG-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16042 22803) (%%FLOAT 49484 23590) (%%FLOAT 17044 17982) (%%FLOAT 49926 37153) (%%FLOAT 17046 5367)))) (%%LOG-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 49512 9103) (%%FLOAT 16992 42274 ) (%%FLOAT 49823 38048) (%%FLOAT 16918 5367)))))) (FNS CL:LOG %%LOG-FLOAT %%LOG-COMPLEX)) (COMS (* SQRT *) (FNS CL:SQRT %%SQRT-FLOAT %%SQRT-COMPLEX)) (COMS (* SIN *) (COMS (* * %%SIN-EPSILON is sufficiently small that (SIN X) = X for X in interval (0 %%SIN-EPSILON) %. It suffices to take %%SIN-EPSILON a little bit smaller than (SQRT (CL:* 6 SINGLE-FLOAT-EPSILON)) which we get by the Taylor series expansion (SIN X) = (+ X (/ (EXPT X 3) 6) ...) (The relative error caused by ommitting ( / (EXPT X 3) 6) isn't observable.) Comparison against %%SIN-EPSILON is used to avoid POLYEVAL microcode underflow when computing SIN. *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%SIN-EPSILON ( %%FLOAT 14720 0)))) (* * %%SIN-PPOLY and %%SIN-QPOLY contain adapted P and Q coefficients of Harris et al SIN 3374 rational approximation to (SIN X) in interval (0 (/ PI 2)) %. The coefficients for %%SIN-PPOLY and %%SIN-QPOLY have been computed from Harris using extended precision routines and the relations %%SIN-PPOLY = (REVERSE (for I from 0 as ENTRY in PS collect (/ (CL:* (EXPT (/ 2 PI) (1+ ( CL:* 2 I))) ENTRY) Q0))) and %%SIN-QPOLY = (REVERSE (for I from 0 as ENTRY in QS collect (/ (CL:* ( EXPT (/ 2 PI) (CL:* 2 I)) ENTRY) Q0))) *) (VARS (%%SIN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 45236 25611) (%%FLOAT 13589 26148) (%%FLOAT 47286 34797) (%%FLOAT 15295 3306) (%%FLOAT 48666 34805) (%%FLOAT 16256 0)))) (%%SIN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 11384 52865) (%%FLOAT 12553 9550) (%%FLOAT 13604 38385) (%%FLOAT 14593 18841) (%%FLOAT 15489 5549) (%%FLOAT 16256 0)))))) (FNS CL:SIN %%SIN-FLOAT %%SIN-COMPLEX)) (COMS (* COS *) (FNS CL:COS %%COS-COMPLEX)) (COMS (* TAN *) (COMS (* * %%TAN-EPSILON is sufficiently small that (TAN X) = X for X in interval (0 %%TAN-EPSILON) %. It suffices to take %%TAN-EPSILON a little bit smaller than (SQRT (CL:* 3 SINGLE-FLOAT-EPSILON)) which we get by the Taylor series expansion (TAN X) = (+ X (/ (EXPT X 3) 3) ...) (The relative error caused by ommitting ( / (EXPT X 3) 3) isn't observable.) Comparison against %%TAN-EPSILON is used to avoid POLYEVAL microcode underflow when computing TAN. *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%TAN-EPSILON ( %%FLOAT 14720 0)))) (* * %%TAN-PPOLY and %%TAN-QPOLY contain adapted P and Q coefficients of Harris et al TAN 4288 rational approximation to (TAN X) in interval (-PI/4 PI/4) %. The coefficients for %%TAN-PPOLY and %%TAN-QPOLY have been computed from Harris using extended precision routines and the relations %%TAN-PPOLY = (REVERSE (for I from 0 as ENTRY in PS collect (/ (CL:* (EXPT (/ 4 PI) (1+ ( CL:* 2 I))) ENTRY) Q0))) and %%TAN-QPOLY = (REVERSE (for I from 0 as ENTRY in QS collect (/ (CL:* ( EXPT (/ 4 PI) (CL:* 2 I)) ENTRY) Q0))) *) (VARS (%%TAN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 13237 21090) (%%FLOAT 47141 15825) (%%FLOAT 15246 8785) (%%FLOAT 48655 48761) (%%FLOAT 16256 0)))) (%%TAN-QPOLY ( %%MAKE-ARRAY (LIST (%%FLOAT 45267 36947) (%%FLOAT 13848 46875) (%%FLOAT 47612 53738) (%%FLOAT 15596 52854) (%%FLOAT 48882 35303) (%%FLOAT 16256 0)))))) (FNS CL:TAN %%TAN-FLOAT %%TAN-COMPLEX)) (COMS (* ASIN *) (COMS (* * %%ASIN-EPSILON is sufficiently small that (ASIN X) = X for X in interval (0 %%ASIN-EPSILON) %. It suffices to take %%ASIN-EPSILON a little bit smaller than (CL:* 2 SINGLE-FLOAT-EPSILON) which we get by the Taylor series expansion (ASIN X) = (+ X (/ (EXPT X 3) 6) ... ) (The relative error caused by ommitting (/ (EXPT X 3) 6) isn't observable.) Comparison against %%ASIN-EPSILON is used to avoid POLYEVAL microcode underflow when computing SIN. *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%ASIN-EPSILON (%%FLOAT 14720 0)))) (* * %%ASIN-PPOLY and %%ASIN-QPOLY contain P and Q coefficients of Harris et al ARCSN 4671 rational approximation to (ASIN X ) in interval (0 (SQRT .5)) . *) (VARS (%%ASIN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16007 50045) ( %%FLOAT 49549 8020) (%%FLOAT 17236 15848) (%%FLOAT 50285 63464) (%%FLOAT 17650 31235) (%%FLOAT 50403 62852) (%%FLOAT 17440 39471)))) (%%ASIN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 49672 25817) (%%FLOAT 17308 55260) (%%FLOAT 50326 38098) (%%FLOAT 17674 22210) (%%FLOAT 50417 22451) ( %%FLOAT 17440 39471)))))) (FNS ASIN %%ASIN-FLOAT %%ASIN-COMPLEX)) (COMS (* ACOS *) (FNS ACOS %%ACOS-COMPLEX)) (COMS (* ATAN *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%SQRT3 (%%FLOAT 16349 46039)) (%%2-SQRT3 (%%FLOAT 16009 12451)) (%%INV-2-SQRT3 (%%FLOAT 16494 55788))) (FILES (LOADCOMP) LLFLOAT)) (FNS CL:ATAN %%ATAN-FLOAT1 %%ATAN-FLOAT2 %%ATAN-DOMAIN-CHECK %%ATAN-FLOAT %%ATAN-COMPLEX)) ( COMS (* CIS *) (FNS CIS)) (COMS (* SINH COSH TANH *) (FNS SINH COSH TANH)) (COMS (* ASINH ACOSH ATANH *) (FNS ASINH ACOSH ATANH %%ATANH-DOMAIN-CHECK)) (PROP FILETYPE CMLFLOAT) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA %%ATANH-DOMAIN-CHECK ATANH ACOSH ASINH TANH COSH SINH CIS %%ATAN-COMPLEX %%ATAN-FLOAT %%ATAN-DOMAIN-CHECK %%ATAN-FLOAT2 %%ATAN-FLOAT1 CL:ATAN %%ACOS-COMPLEX ACOS %%ASIN-COMPLEX ASIN %%TAN-COMPLEX CL:TAN %%COS-COMPLEX CL:COS %%SIN-COMPLEX CL:SIN %%SQRT-PERFECT CL:SQRT %%LOG-COMPLEX CL:LOG %%EXPT-COMPLEX-POWER %%EXPT-COMPLEX %%EXPT-INTEGER CL:EXPT %%EXP-COMPLEX %%EXP-FLOAT EXP))))) %%FLOAT D1 (I 1 LOWORD I 0 HIWORD) @ANIL NIL () (RPAQQ MOST-POSITIVE-FIXNUM 65535) (RPAQQ MOST-NEGATIVE-FIXNUM -65536) (RPAQ MOST-POSITIVE-SINGLE-FLOAT (%%FLOAT 32639 65535)) (RPAQ LEAST-POSITIVE-SINGLE-FLOAT (%%FLOAT 128 0)) (RPAQ LEAST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 32896 0)) (RPAQ MOST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 65407 65535)) (RPAQ MOST-POSITIVE-SHORT-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (RPAQ LEAST-POSITIVE-SHORT-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (RPAQ LEAST-NEGATIVE-SHORT-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (RPAQ MOST-NEGATIVE-SHORT-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) (RPAQ MOST-POSITIVE-DOUBLE-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (RPAQ LEAST-POSITIVE-DOUBLE-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (RPAQ LEAST-NEGATIVE-DOUBLE-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (RPAQ MOST-NEGATIVE-DOUBLE-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) (RPAQ MOST-POSITIVE-LONG-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (RPAQ LEAST-POSITIVE-LONG-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (RPAQ LEAST-NEGATIVE-LONG-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (RPAQ MOST-NEGATIVE-LONG-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) (CONSTANTS (MOST-POSITIVE-FIXNUM 65535) (MOST-NEGATIVE-FIXNUM -65536) (MOST-POSITIVE-SINGLE-FLOAT ( %%FLOAT 32639 65535)) (LEAST-POSITIVE-SINGLE-FLOAT (%%FLOAT 128 0)) (LEAST-NEGATIVE-SINGLE-FLOAT ( %%FLOAT 32896 0)) (MOST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 65407 65535)) (MOST-POSITIVE-SHORT-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (LEAST-POSITIVE-SHORT-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) ( LEAST-NEGATIVE-SHORT-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (MOST-NEGATIVE-SHORT-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) (MOST-POSITIVE-DOUBLE-FLOAT MOST-POSITIVE-SINGLE-FLOAT) ( LEAST-POSITIVE-DOUBLE-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (LEAST-NEGATIVE-DOUBLE-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (MOST-NEGATIVE-DOUBLE-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) ( MOST-POSITIVE-LONG-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (LEAST-POSITIVE-LONG-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (LEAST-NEGATIVE-LONG-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) ( MOST-NEGATIVE-LONG-FLOAT MOST-NEGATIVE-SINGLE-FLOAT)) (RPAQ SINGLE-FLOAT-EPSILON (%%FLOAT 13312 0)) (RPAQ SHORT-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) (RPAQ DOUBLE-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) (RPAQ LONG-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) (CONSTANTS (SINGLE-FLOAT-EPSILON (%%FLOAT 13312 0)) (SHORT-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) ( DOUBLE-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) (LONG-FLOAT-EPSILON SINGLE-FLOAT-EPSILON)) (RPAQ SINGLE-FLOAT-NEGATIVE-EPSILON (%%FLOAT 13184 0)) (RPAQ SHORT-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) (RPAQ DOUBLE-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) (RPAQ LONG-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) (CONSTANTS (SINGLE-FLOAT-NEGATIVE-EPSILON (%%FLOAT 13184 0)) (SHORT-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) (DOUBLE-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) ( LONG-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON)) (RPAQ PI (%%FLOAT 16457 4059)) (CONSTANTS (PI (%%FLOAT 16457 4059))) %%MAKE-ARRAY D1 (P 0 ARRAY I 0 LIST) 1@ goj X@jIHHJK IJkԺ(45Q SETA 21Q ARRAY 6 LENGTH) (11Q FLOATP) ( 15Q 0.0) (RPAQ %%LOG-BASE2-E (%%FLOAT 16312 43579)) (CONSTANTS (%%LOG-BASE2-E (%%FLOAT 16312 43579))) (RPAQ %%EXP-POLY (%%MAKE-ARRAY (LIST (%%FLOAT 15549 17659) (%%FLOAT 16256 0) (%%FLOAT 16801 38273) ( %%FLOAT 17257 7717) (%%FLOAT 17597 11739) (%%FLOAT 17800 30401)))) (RPAQ %%EXP-TABLE (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 16267 38338) (%%FLOAT 16280 14320) ( %%FLOAT 16293 65239) (%%FLOAT 16309 1267) (%%FLOAT 16325 26410) (%%FLOAT 16343 17661) (%%FLOAT 16362 49351)))) EXP D1 (L (0 NUMBER)) /@Hd`@ 3@ igHo b(50Q CHECK-TYPE-FAIL 33Q %%EXP-FLOAT 20Q %%EXP-COMPLEX) (40Q NUMBER 30Q FLOATP 11Q COMPLEXTYPE#) ( 45Q (OR COMPLEX NUMBER)) %%EXP-FLOAT D1 (L (0 X)) rp@[jKjKջiKo ]Mo ^N`J K`l2hK`l2 I \HkL L(155Q %%/ 145Q SCALE-FLOAT 140Q %%/ 70Q ELT 52Q \MVLIST 47Q TRUNCATE 32Q \MVLIST 27Q TRUNCATE) (125Q ARRAYP 122Q %%EXP-POLY 101Q ARRAYP 76Q %%EXP-POLY 64Q %%EXP-TABLE) ( 44Q .125 23Q 1.442695) %%EXP-COMPLEX D1 (L (0 Z)) @ @ H I (23Q CIS 17Q EXP 12Q IMAGPART 3 REALPART) NIL () CL:EXPT D1 (L (1 POWER-NUMBER 0 BASE-NUMBER)) @d A3 %@j A @o@A @ Ad3 @A A @d @ @A o@A @ @A A3 j@o@A @A (176Q %%EXPT-FLOAT 162Q CL:ERROR 140Q %%EXPT-COMPLEX 132Q COMPLEXP 125Q CL:ERROR 113Q %%EXPT-COMPLEX-POWER 105Q PLUSP 77Q COMPLEXP 70Q COMPLEXP 63Q %%EXPT-INTEGER 47Q COMPLEXP 42Q CL:ERROR 26Q PLUSP 20Q %%= 4 RATIONALP) (173Q FLOATP 167Q FLOATP) ( 155Q "Negative number ~A to non-integral power ~A." 120Q "~A negative number to a complex power ~A." 35Q "~A to a non-positive power ~A.") %%EXPT-INTEGER D1 (L (1 POWER 0 BASE)) jAk@jA @d @d3 3 #@l kA  A @ A Am Akj@kHj$H@dbHbm Akj@Iև IIX(170Q \FZEROP 153Q ASH 107Q ASH 100Q %%MAKE-RATIO 75Q %%EXPT-INTEGER 71Q DENOMINATOR 65Q %%EXPT-INTEGER 61Q NUMERATOR 55Q ASH 46Q %%= 24Q RATIONALP 16Q %%/ 13Q %%EXPT-INTEGER) NIL () %%EXPT-FLOAT D1 (I 1 Y I 0 X) @o oA@ (26Q EXP 22Q CL:LOG 7 %%=) NIL ( 14Q 0.0 4 0.0) %%EXPT-COMPLEX D1 (L (1 N 0 Z)) @ A A@ (20Q CIS 14Q PHASE 7 CL:EXPT 3 %%COMPLEX-ABS) NIL () %%EXPT-COMPLEX-POWER D1 (L (1 W 0 Z)) A@ (10Q EXP 4 CL:LOG) NIL () (RPAQ %%LOG-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16042 22803) (%%FLOAT 49484 23590) (%%FLOAT 17044 17982 ) (%%FLOAT 49926 37153) (%%FLOAT 17046 5367)))) (RPAQ %%LOG-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 49512 9103) (%%FLOAT 16992 42274) ( %%FLOAT 49823 38048) (%%FLOAT 16918 5367)))) CL:LOG D1 (L (0 -args-)) ceka1lHhilaJ=I K 3 jIjI o I igLo I\d` (140Q %%LOG-COMPLEX 122Q CHECK-TYPE-FAIL 105Q %%LOG-FLOAT 75Q COMPLEX 66Q %%LOG-FLOAT 43Q %%/ 40Q CL:LOG 34Q CL:LOG) (132Q COMPLEXTYPE# 112Q NUMBER 102Q FLOATP 63Q FLOATP) ( 117Q (OR COMPLEX NUMBER) 72Q 3.141593) %%LOG-FLOAT D1 (P 4 ANSWER P 3 Z2 P 2 Z P 1 EXP P 0 R I 0 X) {P@oo@ @oXdlYHlHdoIkԹHo XkHk Zdd[JK`l2K`l2 Io(160Q %%/ 105Q %%/ 74Q %%/ 21Q ERROR) (145Q ARRAYP 142Q %%LOG-QPOLY 124Q ARRAYP 121Q %%LOG-PPOLY) ( 166Q .6931472 71Q 2.0 55Q 1.414214 27Q 0.0 15Q "LOG OF ZERO:" 7 0.0) %%LOG-COMPLEX D1 (L (0 Z)) @ @ (15Q COMPLEX 12Q PHASE 6 CL:LOG 3 %%COMPLEX-ABS) NIL () CL:SQRT D1 (L (0 X)) "@ @ j@jd@ @ (37Q %%SQRT-FLOAT 27Q COMPLEX 24Q CL:SQRT 10Q %%SQRT-COMPLEX 3 COMPLEXP) (34Q FLOATP) () %%SQRT-FLOAT D1 (I 0 X) bh@oo@llnll@ljXldjn?jH@H kٰH(121Q %%/) NIL ( 16Q 0.0 10Q 0.0) %%SQRT-COMPLEX D1 (P 11Q I P 7 ANSWER I 0 X) hdddddd@ Z@ [@ X@ o YHI \HI ]lk OOYLdMdn?jLJLKMN n?jMKLJMN Ok_LM (265Q COMPLEX 234Q %%/ 172Q %%/ 102Q CL:SIN 66Q CL:COS 54Q %%/ 45Q PHASE 36Q CL:SQRT 33Q ABS 24Q IMAGPART 15Q REALPART) NIL ( 51Q 2.0) (RPAQ %%SIN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 45236 25611) (%%FLOAT 13589 26148) (%%FLOAT 47286 34797 ) (%%FLOAT 15295 3306) (%%FLOAT 48666 34805) (%%FLOAT 16256 0)))) (RPAQ %%SIN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 11384 52865) (%%FLOAT 12553 9550) (%%FLOAT 13604 38385) (%%FLOAT 14593 18841) (%%FLOAT 15489 5549) (%%FLOAT 16256 0)))) CL:SIN D1 (L (0 RADIANS)) ;@HYd`@ l@ I3@ igHo b(64Q CHECK-TYPE-FAIL 47Q %%SIN-FLOAT 33Q %%SIN-FLOAT 21Q %%SIN-COMPLEX) (54Q RADIANS 44Q FLOATP 12Q COMPLEXTYPE#) ( 61Q (OR COMPLEX FLOAT NUMBER)) %%SIN-FLOAT D1 (I 1 COS-FLAG I 0 X) hddA@@jn?n@n?n@XjHnjѹhHn?jѹHo XddohIHn@InXon@InHoHIHHdZIHJ`l2J`l2 d(266Q %%/ 113Q REM) (253Q ARRAYP 250Q %%SIN-QPOLY 234Q ARRAYP 231Q %%SIN-PPOLY) ( 201Q .0002441406 160Q 1.570796 126Q 3.141593 110Q 6.283186) %%SIN-COMPLEX D1 (L (0 Z)) #@ @ H I H I (40Q COMPLEX 34Q SINH 30Q CL:COS 23Q COSH 17Q CL:SIN 12Q IMAGPART 3 REALPART) NIL () CL:COS D1 (L (0 RADIANS)) =@HYdl@i `@ I3@i igHo b(66Q CHECK-TYPE-FAIL 51Q %%SIN-FLOAT 34Q %%COS-COMPLEX 21Q %%SIN-FLOAT) (56Q RADIANS 45Q FLOATP 26Q COMPLEXTYPE#) ( 63Q (OR FLOAT COMPLEX NUMBER)) %%COS-COMPLEX D1 (L (0 Z)) %@ @ H I jH I (42Q COMPLEX 35Q SINH 31Q CL:SIN 23Q COSH 17Q CL:COS 12Q IMAGPART 3 REALPART) NIL () (RPAQ %%TAN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 13237 21090) (%%FLOAT 47141 15825) (%%FLOAT 15246 8785) (%%FLOAT 48655 48761) (%%FLOAT 16256 0)))) (RPAQ %%TAN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 45267 36947) (%%FLOAT 13848 46875) (%%FLOAT 47612 53738 ) (%%FLOAT 15596 52854) (%%FLOAT 48882 35303) (%%FLOAT 16256 0)))) CL:TAN D1 (L (0 RADIANS)) /@Hd`@ 3@ igHo b(50Q CHECK-TYPE-FAIL 33Q %%TAN-FLOAT 20Q %%TAN-COMPLEX) (40Q RADIANS 30Q FLOATP 11Q COMPLEXTYPE#) ( 45Q (OR COMPLEX NUMBER)) %%TAN-FLOAT D1 (P 4 RECIPFLG P 3 SIGN I 0 X) hdd#@XjHohHoHo XddoHn@InoHinɌoin?nHoH KHLkJ JHdYKHI`l2I`l2 ZLkJ J(305Q %%/ 265Q %%/ 204Q %%/ 161Q ABS 50Q REM) (252Q ARRAYP 247Q %%TAN-QPOLY 233Q ARRAYP 230Q %%TAN-PPOLY) ( 153Q .0002441406 130Q .7853982 106Q -.7853982 63Q 1.570796 45Q 3.141593 35Q 1.0 23Q -1.0) %%TAN-COMPLEX D1 (L (0 Z)) )@ @ YjIHI  o@ (46Q CL:ERROR 34Q \FZEROP 30Q %%/ 12Q CL:COS 3 CL:SIN) NIL ( 42Q "~S undefined tangent.") (RPAQ %%ASIN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16007 50045) (%%FLOAT 49549 8020) (%%FLOAT 17236 15848 ) (%%FLOAT 50285 63464) (%%FLOAT 17650 31235) (%%FLOAT 50403 62852) (%%FLOAT 17440 39471)))) (RPAQ %%ASIN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 49672 25817) (%%FLOAT 17308 55260) ( %%FLOAT 50326 38098) (%%FLOAT 17674 22210) (%%FLOAT 50417 22451) (%%FLOAT 17440 39471)))) ASIN D1 (L (0 NUMBER)) ;@HYdl@ `@ I3@ igHo b(64Q CHECK-TYPE-FAIL 47Q %%ASIN-FLOAT 33Q %%ASIN-COMPLEX 20Q %%ASIN-FLOAT) (54Q NUMBER 44Q FLOATP 25Q COMPLEXTYPE#) ( 61Q (OR FLOAT COMPLEX NUMBER)) %%ASIN-FLOAT D1 (P 4 ANSWER P 3 R2 P 2 R P 1 REDUCED P 0 NEGATIVE I 1 ACOS-FLAG I 0 X) P@ZoJdooJ oJijJZJoioJo oJJ-JdֻJK`l2K`l2 \IoLoռHjLռAoLL(166Q %%/ 101Q CL:SQRT 32Q ERROR) (153Q ARRAYP 150Q %%ASIN-QPOLY 132Q ARRAYP 127Q %%ASIN-PPOLY) ( 222Q 1.570796 203Q 2.0 176Q 1.570796 106Q .0002441406 75Q .5 67Q 1.0 56Q .5 37Q 0.0 26Q "ARCSIN: arg not in range" 20Q 1.0 10Q -1.0) %%ASIN-COMPLEX D1 (L (0 Z)) @ k@d (25Q %%COMPLEX-MINUS 22Q %%COMPLEX-TIMESI 17Q CL:LOG 13Q CL:SQRT 3 %%COMPLEX-TIMESI) NIL () ACOS D1 (L (0 NUMBER)) =@HYdl@i `@ I3@i igHo b(66Q CHECK-TYPE-FAIL 51Q %%ASIN-FLOAT 34Q %%ACOS-COMPLEX 21Q %%ASIN-FLOAT) (56Q NUMBER 45Q FLOATP 26Q COMPLEXTYPE#) ( 63Q (OR FLOAT COMPLEX NUMBER)) %%ACOS-COMPLEX D1 (L (0 Z)) @k@d (25Q %%COMPLEX-MINUS 22Q %%COMPLEX-TIMESI 17Q CL:LOG 13Q %%COMPLEX-TIMESI 10Q CL:SQRT) NIL () CL:ATAN D1 (L (1 Y 0 X)) "A@A @d @  (37Q %%ATAN-FLOAT 30Q %%ATAN-COMPLEX 22Q COMPLEXP 14Q %%ATAN-FLOAT) (34Q FLOATP 11Q FLOATP 5 FLOATP) () %%ATAN-FLOAT1 D1 (L (0 X)) ij@jd@ o@@ k@@ok@o oo@oo@@ok ok@ (145Q %%ATAN-FLOAT2 142Q %%/ 127Q %%ATAN-FLOAT2 124Q %%/ 61Q %%ATAN-FLOAT2 56Q %%/ 27Q %%ATAN-FLOAT2 12Q %%ATAN-FLOAT1) NIL ( 135Q 1.570796 116Q 1.732051 107Q 1.732051 103Q 1.047198 73Q 3.732051 65Q .5235988 52Q 1.732051 42Q 1.732051 20Q .2679492) %%ATAN-FLOAT2 D1 (L (0 X)) ,j@dAkj@[JL LIlԹLKHֻLKI ԰(47Q %%/ 23Q %%=) NIL () %%ATAN-DOMAIN-CHECK D1 (L (0 Z)) '@ Hj HH  @ k h(42Q %%= 36Q ABS 33Q IMAGPART 24Q \FZEROP 3 REALPART) NIL () %%ATAN-FLOAT D1 (L (1 X 0 Y)) A@j@dZd To@HA Hj o Aj @ o@j A joA @d @A @ oj@A A j@jA @A o(227Q %%ATAN-FLOAT1 224Q %%/ 215Q %%ATAN-FLOAT1 212Q %%/ 201Q PLUSP 173Q %%ATAN-FLOAT1 170Q %%/ 154Q PLUSP 147Q %%ATAN-FLOAT1 144Q %%/ 135Q PLUSP 127Q PLUSP 113Q PLUSP 106Q %%= 73Q %%SIGNUM 66Q %%= 60Q CL:ERROR 47Q %%= 40Q %%= 20Q \FZEROP) NIL ( 233Q 3.141593 161Q 3.141593 122Q 3.141593 77Q 1.570796 55Q "Error in double entry atan both 0." 26Q 0.0) %%ATAN-COMPLEX D1 (L (0 Z)) /@ !@ HkkH o o@ (54Q CL:ERROR 43Q %%COMPLEX-MINUS 40Q %%COMPLEX-TIMESI 30Q CL:LOG 25Q %%/ 11Q %%COMPLEX-TIMESI 3 %%ATAN-DOMAIN-CHECK) NIL ( 50Q "Argument not in domain for atan. ~S" 34Q .5) CIS D1 (L (0 RADIANS)) @d o@  @ (31Q COMPLEX 26Q CL:SIN 22Q CL:COS 16Q CL:ERROR 4 COMPLEXP) NIL ( 12Q "Argument to CIS is complex: ~S") SINH D1 (L (0 NUMBER)) @ HkH l (22Q %%/ 14Q %%/ 3 EXP) NIL () COSH D1 (L (0 NUMBER)) @ HkH l (22Q %%/ 14Q %%/ 3 EXP) NIL () TANH D1 (L (0 NUMBER)) !@l kH kIk kHk (35Q %%/ 26Q %%/ 16Q %%/ 6 EXP) NIL () ASINH D1 (L (0 NUMBER)) @ddk (14Q CL:LOG 10Q CL:SQRT) NIL () ACOSH D1 (L (0 NUMBER)) @ddk (14Q CL:LOG 10Q CL:SQRT) NIL () ATANH D1 (L (0 NUMBER)) "@ @kk@ oo@ (37Q CL:ERROR 21Q CL:LOG 16Q %%/ 3 %%ATANH-DOMAIN-CHECK) NIL ( 33Q "~S argument out of range." 25Q .5) %%ATANH-DOMAIN-CHECK D1 (L (0 Z)) '@ Hj HH  @ k h(42Q %%= 36Q ABS 33Q REALPART 24Q \FZEROP 3 IMAGPART) NIL () (PUTPROPS CMLFLOAT FILETYPE COMPILE-FILE) (RPAQQ CMLFLOATCOMS ((* * CMLFLOAT -- Covering sections 12.5-12.5.3 irrational, transcendental, exponential, logarithmic, trigonometric, and hyperbolic functions. Section 12.10, implementation parameters. -- By Kelly Roach. *) (COMS (* Section 12.10, implementation parameters. The constants in this COMS are exported to the user. *) (* %%FLOAT allows us to recreate FLOATPs in a way that is independent of the ordinairy reading and printing FLOATPs to files which involves loss of the last couple bits of accuracy due to rounding effects. *) (FNS %%FLOAT) (CONSTANTS (MOST-POSITIVE-FIXNUM 65535) (MOST-NEGATIVE-FIXNUM -65536) (MOST-POSITIVE-SINGLE-FLOAT (%%FLOAT 32639 65535)) ( LEAST-POSITIVE-SINGLE-FLOAT (%%FLOAT 128 0)) (LEAST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 32896 0)) ( MOST-NEGATIVE-SINGLE-FLOAT (%%FLOAT 65407 65535)) (MOST-POSITIVE-SHORT-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (LEAST-POSITIVE-SHORT-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) ( LEAST-NEGATIVE-SHORT-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (MOST-NEGATIVE-SHORT-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) (MOST-POSITIVE-DOUBLE-FLOAT MOST-POSITIVE-SINGLE-FLOAT) ( LEAST-POSITIVE-DOUBLE-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (LEAST-NEGATIVE-DOUBLE-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) (MOST-NEGATIVE-DOUBLE-FLOAT MOST-NEGATIVE-SINGLE-FLOAT) ( MOST-POSITIVE-LONG-FLOAT MOST-POSITIVE-SINGLE-FLOAT) (LEAST-POSITIVE-LONG-FLOAT LEAST-POSITIVE-SINGLE-FLOAT) (LEAST-NEGATIVE-LONG-FLOAT LEAST-NEGATIVE-SINGLE-FLOAT) ( MOST-NEGATIVE-LONG-FLOAT MOST-NEGATIVE-SINGLE-FLOAT)) (* EPSILON is the smallest positive floating point number such that (NOT (= (FLOAT 1 EPSILON) (+ (FLOAT 1 EPSILON) EPSILON))) *) (CONSTANTS ( SINGLE-FLOAT-EPSILON (%%FLOAT 13312 0)) (SHORT-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) ( DOUBLE-FLOAT-EPSILON SINGLE-FLOAT-EPSILON) (LONG-FLOAT-EPSILON SINGLE-FLOAT-EPSILON)) (* NEGATIVE-EPSILON is the smallest negative floating point number such that (NOT (= (FLOAT 1 NEGATIVE-EPSILON) (- (FLOAT 1 NEGATIVE-EPSILON) NEGATIVE-EPSILON))) *) (CONSTANTS ( SINGLE-FLOAT-NEGATIVE-EPSILON (%%FLOAT 13184 0)) (SHORT-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) (DOUBLE-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON) ( LONG-FLOAT-NEGATIVE-EPSILON SINGLE-FLOAT-NEGATIVE-EPSILON))) (COMS (* Miscellaneous. *) (DECLARE: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) LLFLOAT)) (CONSTANTS (PI (%%FLOAT 16457 4059))) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%E (%%FLOAT 16429 63572)) (%%2PI (%%FLOAT 16585 4059)) (%%PI ( %%FLOAT 16457 4059)) (%%2PI/3 (%%FLOAT 16390 2706)) (%%PI/2 (%%FLOAT 16329 4059)) (%%-PI/2 (%%FLOAT 49097 4059)) (%%PI/3 (%%FLOAT 16262 2706)) (%%PI/4 (%%FLOAT 16201 4059)) (%%-PI/4 (%%FLOAT 48969 4059) ) (%%PI/6 (%%FLOAT 16134 2706)) (%%2/PI (%%FLOAT 16162 63875)))) (FNS %%MAKE-ARRAY)) (COMS (* EXP *) ( COMS (CONSTANTS (%%LOG-BASE2-E (%%FLOAT 16312 43579))) (* * %%EXP-POLY contains P and Q coefficients of Harris et al EXPB 1103 rational approximation to (EXPT 2 X) in interval (0 .125) %. %%EXP-TABLE contains values of powers (EXPT 2 (/ N 8)) . *) (VARS (%%EXP-POLY (%%MAKE-ARRAY (LIST (%%FLOAT 15549 17659) (%%FLOAT 16256 0) (%%FLOAT 16801 38273) (%%FLOAT 17257 7717) (%%FLOAT 17597 11739) (%%FLOAT 17800 30401)))) (%%EXP-TABLE (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 16267 38338) (%%FLOAT 16280 14320) (%%FLOAT 16293 65239) (%%FLOAT 16309 1267) (%%FLOAT 16325 26410) (%%FLOAT 16343 17661) ( %%FLOAT 16362 49351)))))) (FNS EXP %%EXP-FLOAT %%EXP-COMPLEX)) (COMS (* EXPT *) (FNS CL:EXPT %%EXPT-INTEGER %%EXPT-FLOAT %%EXPT-COMPLEX %%EXPT-COMPLEX-POWER)) (COMS (* LOG *) (COMS (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%LOG2 (%%FLOAT 16177 29208)) (%%SQRT2 (%%FLOAT 16309 1267)))) (* * %%LOG-PPOLY and %%LOG-QPOLY contain P and Q coefficients of Harris et al LOGE 2707 rational approximation to (LOG X) in interval ((SQRT .5) (SQRT 2)) . *) (VARS (%%LOG-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16042 22803) (%%FLOAT 49484 23590) (%%FLOAT 17044 17982) (%%FLOAT 49926 37153) (%%FLOAT 17046 5367)))) (%%LOG-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 49512 9103) (%%FLOAT 16992 42274 ) (%%FLOAT 49823 38048) (%%FLOAT 16918 5367)))))) (FNS CL:LOG %%LOG-FLOAT %%LOG-COMPLEX)) (COMS (* SQRT *) (FNS CL:SQRT %%SQRT-FLOAT %%SQRT-COMPLEX)) (COMS (* SIN *) (COMS (* * %%SIN-EPSILON is sufficiently small that (SIN X) = X for X in interval (0 %%SIN-EPSILON) %. It suffices to take %%SIN-EPSILON a little bit smaller than (SQRT (CL:* 6 SINGLE-FLOAT-EPSILON)) which we get by the Taylor series expansion (SIN X) = (+ X (/ (EXPT X 3) 6) ...) (The relative error caused by ommitting ( / (EXPT X 3) 6) isn't observable.) Comparison against %%SIN-EPSILON is used to avoid POLYEVAL microcode underflow when computing SIN. *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%SIN-EPSILON ( %%FLOAT 14720 0)))) (* * %%SIN-PPOLY and %%SIN-QPOLY contain adapted P and Q coefficients of Harris et al SIN 3374 rational approximation to (SIN X) in interval (0 (/ PI 2)) %. The coefficients for %%SIN-PPOLY and %%SIN-QPOLY have been computed from Harris using extended precision routines and the relations %%SIN-PPOLY = (REVERSE (for I from 0 as ENTRY in PS collect (/ (CL:* (EXPT (/ 2 PI) (1+ ( CL:* 2 I))) ENTRY) Q0))) and %%SIN-QPOLY = (REVERSE (for I from 0 as ENTRY in QS collect (/ (CL:* ( EXPT (/ 2 PI) (CL:* 2 I)) ENTRY) Q0))) *) (VARS (%%SIN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 45236 25611) (%%FLOAT 13589 26148) (%%FLOAT 47286 34797) (%%FLOAT 15295 3306) (%%FLOAT 48666 34805) (%%FLOAT 16256 0)))) (%%SIN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 11384 52865) (%%FLOAT 12553 9550) (%%FLOAT 13604 38385) (%%FLOAT 14593 18841) (%%FLOAT 15489 5549) (%%FLOAT 16256 0)))))) (FNS CL:SIN %%SIN-FLOAT %%SIN-COMPLEX)) (COMS (* COS *) (FNS CL:COS %%COS-COMPLEX)) (COMS (* TAN *) (COMS (* * %%TAN-EPSILON is sufficiently small that (TAN X) = X for X in interval (0 %%TAN-EPSILON) %. It suffices to take %%TAN-EPSILON a little bit smaller than (SQRT (CL:* 3 SINGLE-FLOAT-EPSILON)) which we get by the Taylor series expansion (TAN X) = (+ X (/ (EXPT X 3) 3) ...) (The relative error caused by ommitting ( / (EXPT X 3) 3) isn't observable.) Comparison against %%TAN-EPSILON is used to avoid POLYEVAL microcode underflow when computing TAN. *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%TAN-EPSILON ( %%FLOAT 14720 0)))) (* * %%TAN-PPOLY and %%TAN-QPOLY contain adapted P and Q coefficients of Harris et al TAN 4288 rational approximation to (TAN X) in interval (-PI/4 PI/4) %. The coefficients for %%TAN-PPOLY and %%TAN-QPOLY have been computed from Harris using extended precision routines and the relations %%TAN-PPOLY = (REVERSE (for I from 0 as ENTRY in PS collect (/ (CL:* (EXPT (/ 4 PI) (1+ ( CL:* 2 I))) ENTRY) Q0))) and %%TAN-QPOLY = (REVERSE (for I from 0 as ENTRY in QS collect (/ (CL:* ( EXPT (/ 4 PI) (CL:* 2 I)) ENTRY) Q0))) *) (VARS (%%TAN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 13237 21090) (%%FLOAT 47141 15825) (%%FLOAT 15246 8785) (%%FLOAT 48655 48761) (%%FLOAT 16256 0)))) (%%TAN-QPOLY ( %%MAKE-ARRAY (LIST (%%FLOAT 45267 36947) (%%FLOAT 13848 46875) (%%FLOAT 47612 53738) (%%FLOAT 15596 52854) (%%FLOAT 48882 35303) (%%FLOAT 16256 0)))))) (FNS CL:TAN %%TAN-FLOAT %%TAN-COMPLEX)) (COMS (* ASIN *) (COMS (* * %%ASIN-EPSILON is sufficiently small that (ASIN X) = X for X in interval (0 %%ASIN-EPSILON) %. It suffices to take %%ASIN-EPSILON a little bit smaller than (CL:* 2 SINGLE-FLOAT-EPSILON) which we get by the Taylor series expansion (ASIN X) = (+ X (/ (EXPT X 3) 6) ... ) (The relative error caused by ommitting (/ (EXPT X 3) 6) isn't observable.) Comparison against %%ASIN-EPSILON is used to avoid POLYEVAL microcode underflow when computing SIN. *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%ASIN-EPSILON (%%FLOAT 14720 0)))) (* * %%ASIN-PPOLY and %%ASIN-QPOLY contain P and Q coefficients of Harris et al ARCSN 4671 rational approximation to (ASIN X ) in interval (0 (SQRT .5)) . *) (VARS (%%ASIN-PPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16007 50045) ( %%FLOAT 49549 8020) (%%FLOAT 17236 15848) (%%FLOAT 50285 63464) (%%FLOAT 17650 31235) (%%FLOAT 50403 62852) (%%FLOAT 17440 39471)))) (%%ASIN-QPOLY (%%MAKE-ARRAY (LIST (%%FLOAT 16256 0) (%%FLOAT 49672 25817) (%%FLOAT 17308 55260) (%%FLOAT 50326 38098) (%%FLOAT 17674 22210) (%%FLOAT 50417 22451) ( %%FLOAT 17440 39471)))))) (FNS ASIN %%ASIN-FLOAT %%ASIN-COMPLEX)) (COMS (* ACOS *) (FNS ACOS %%ACOS-COMPLEX)) (COMS (* ATAN *) (DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS (%%SQRT3 (%%FLOAT 16349 46039)) (%%2-SQRT3 (%%FLOAT 16009 12451)) (%%INV-2-SQRT3 (%%FLOAT 16494 55788))) (FILES (LOADCOMP) LLFLOAT)) (FNS CL:ATAN %%ATAN-FLOAT1 %%ATAN-FLOAT2 %%ATAN-DOMAIN-CHECK %%ATAN-FLOAT %%ATAN-COMPLEX)) ( COMS (* CIS *) (FNS CIS)) (COMS (* SINH COSH TANH *) (FNS SINH COSH TANH)) (COMS (* ASINH ACOSH ATANH *) (FNS ASINH ACOSH ATANH %%ATANH-DOMAIN-CHECK)) (PROP FILETYPE CMLFLOAT) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA %%ATANH-DOMAIN-CHECK ATANH ACOSH ASINH TANH COSH SINH CIS %%ATAN-COMPLEX %%ATAN-FLOAT %%ATAN-DOMAIN-CHECK %%ATAN-FLOAT2 %%ATAN-FLOAT1 CL:ATAN %%ACOS-COMPLEX ACOS %%ASIN-COMPLEX ASIN %%TAN-COMPLEX CL:TAN %%COS-COMPLEX CL:COS %%SIN-COMPLEX CL:SIN CL:SQRT %%LOG-COMPLEX CL:LOG %%EXPT-COMPLEX-POWER %%EXPT-COMPLEX %%EXPT-INTEGER CL:EXPT %%EXP-COMPLEX %%EXP-FLOAT EXP))))) (PUTPROPS CMLFLOAT COPYRIGHT ("Xerox Corporation" 1986)) STOP