(FILECREATED "20-Aug-86 20:30:46" ("compiled on " {ERIS}LIBRARY>CMLFLOAT.;38) "18-Aug-86 12:42:20" "COMPILE-FILEd" in "Xerox Lisp 18-Aug-86 ..." dated "18-Aug-86 13:55:08") (FILECREATED "20-Aug-86 20:27:43" {ERIS}LIBRARY>CMLFLOAT.;38 80964 changes to: (FNS %%MAKE-ARRAY %%FLOAT EXP %%EXP-FLOAT %%EXP-COMPLEX CL:EXPT %%EXPT-INTEGER %%EXPT-FLOAT %%EXPT-COMPLEX %%EXPT-COMPLEX-POWER CL:LOG %%LOG-FLOAT %%LOG-COMPLEX CL:SQRT %%SQRT-FLOAT %%SQRT-COMPLEX CL:SIN %%SIN-FLOAT %%SIN-COMPLEX CL:COS %%COS-COMPLEX CL:TAN %%TAN-FLOAT %%TAN-COMPLEX ASIN %%ASIN-FLOAT %%ASIN-COMPLEX ACOS %%ACOS-COMPLEX CL:ATAN %%ATAN-FLOAT1 %%ATAN-FLOAT2 %%ATAN-DOMAIN-CHECK %%ATAN-FLOAT %%ATAN-COMPLEX CIS SINH COSH TANH ASINH ACOSH ATANH %%ATANH-DOMAIN-CHECK) (VARS CMLFLOATCOMS) previous date: "20-Aug-86 18:40:46" {ERIS}LIBRARY>CMLFLOAT.;37) (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. *) (DECLARE: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) LLFLOAT)) (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. *) (* Using INITVARS instead of CONSTANTS in various places here because of problems with the way BYTECOMPILER stores FLOATPs in DCOM files. *) (FNS %%FLOAT) (CONSTANTS (MOST-POSITIVE-FIXNUM 65535) (MOST-NEGATIVE-FIXNUM -65536)) (INITVARS (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))) *) (INITVARS ( 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))) *) (INITVARS ( 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)) (INITVARS (PI (%%FLOAT 16457 4059))) (* Should be ( DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS ...)) except that compiler does a poor job of compiling FLOATPs. Use an INITVARS to patch around this situation for now. *) (INITVARS (%%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 (INITVARS (%%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 (INITVARS (%%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. *) (INITVARS (%%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. *) (INITVARS (%%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. *) (INITVARS (%%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 *) (INITVARS (%%SQRT3 (%%FLOAT 16349 46039)) (%%2-SQRT3 (%%FLOAT 16009 12451)) (%%INV-2-SQRT3 (%%FLOAT 16494 55788))) (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 CL:LOG))))) %%FLOAT D1 (I 1 LOWORD I 0 HIWORD) @ANIL NIL () (RPAQQ MOST-POSITIVE-FIXNUM 65535) (RPAQQ MOST-NEGATIVE-FIXNUM -65536) (CONSTANTS (MOST-POSITIVE-FIXNUM 65535) (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) (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) (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) (RPAQ? PI (%%FLOAT 16457 4059)) (RPAQ? %%E (%%FLOAT 16429 63572)) (RPAQ? %%2PI (%%FLOAT 16585 4059)) (RPAQ? %%PI (%%FLOAT 16457 4059)) (RPAQ? %%2PI/3 (%%FLOAT 16390 2706)) (RPAQ? %%PI/2 (%%FLOAT 16329 4059)) (RPAQ? %%-PI/2 (%%FLOAT 49097 4059)) (RPAQ? %%PI/3 (%%FLOAT 16262 2706)) (RPAQ? %%PI/4 (%%FLOAT 16201 4059)) (RPAQ? %%-PI/4 (%%FLOAT 48969 4059)) (RPAQ? %%PI/6 (%%FLOAT 16134 2706)) (RPAQ? %%2/PI (%%FLOAT 16162 63875)) %%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)) (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)) 0@Hdg @ 3@ igHo b(51Q CHECK-TYPE-FAIL 34Q %%EXP-FLOAT 21Q %%EXP-COMPLEX 13Q \INSTANCE-P) (41Q NUMBER 31Q FLOATP 10Q COMPLEX) ( 46Q (OR COMPLEX NUMBER)) %%EXP-FLOAT D1 (L (0 X) F 7 %%LOG-BASE2-E) pp@[jKjKջiWK ]Mo ^N`J K`l2hK`l2 I \HkL L(153Q %%/ 143Q SCALE-FLOAT 136Q %%/ 66Q ELT 50Q \MVLIST 45Q TRUNCATE 30Q \MVLIST 25Q TRUNCATE) (123Q ARRAYP 120Q %%EXP-POLY 77Q ARRAYP 74Q %%EXP-POLY 62Q %%EXP-TABLE) ( 42Q .125) %%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? %%LOG2 (%%FLOAT 16177 29208)) (RPAQ? %%SQRT2 (%%FLOAT 16309 1267)) (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-) F 5 %%PI) beka1lHhilaJ9I K 3jIjI U I igLo I\dg ̿I (137Q %%LOG-COMPLEX 130Q \INSTANCE-P 116Q CHECK-TYPE-FAIL 101Q %%LOG-FLOAT 71Q COMPLEX 65Q %%LOG-FLOAT 43Q %%/ 40Q CL:LOG 34Q CL:LOG) (125Q COMPLEX 106Q NUMBER 76Q FLOATP 62Q FLOATP) ( 113Q (OR COMPLEX NUMBER)) %%LOG-FLOAT D1 (P 4 ANSWER P 3 Z2 P 2 Z P 1 EXP P 0 R I 0 X F 5 %%SQRT2 F 6 %%LOG2) uP@oo@ @oXdlYHlHdUIkԹHo XkHk Zdd[JK`l2K`l2 VI(155Q %%/ 102Q %%/ 71Q %%/ 21Q ERROR) (142Q ARRAYP 137Q %%LOG-QPOLY 121Q ARRAYP 116Q %%LOG-PPOLY) ( 66Q 2.0 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-EPSILON (%%FLOAT 14720 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)) >@HYdg @ g @ I3@ igHo b(67Q CHECK-TYPE-FAIL 52Q %%SIN-FLOAT 36Q %%SIN-FLOAT 31Q \INSTANCE-P 22Q %%SIN-COMPLEX 14Q \INSTANCE-P) (57Q RADIANS 47Q FLOATP 26Q FLOATP 11Q COMPLEX) ( 64Q (OR COMPLEX FLOAT NUMBER)) %%SIN-FLOAT D1 (I 1 COS-FLAG I 0 X F 3 %%PI/2 F 4 %%PI F 5 %%2PI F 6 %%SIN-EPSILON) hddA@@jS@S@XjHnjѹhHn?jѹHU XddThIHTXSTHXHVIHHdZIHJ`l2J`l2 d(233Q %%/ 100Q REM) (220Q ARRAYP 215Q %%SIN-QPOLY 201Q ARRAYP 176Q %%SIN-PPOLY) () %%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)) @@HYdg @i g @ I3@i igHo b(71Q CHECK-TYPE-FAIL 54Q %%SIN-FLOAT 37Q %%COS-COMPLEX 32Q \INSTANCE-P 23Q %%SIN-FLOAT 14Q \INSTANCE-P) (61Q RADIANS 50Q FLOATP 27Q COMPLEX 11Q FLOATP) ( 66Q (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-EPSILON (%%FLOAT 14720 0)) (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)) 0@Hdg @ 3@ igHo b(51Q CHECK-TYPE-FAIL 34Q %%TAN-FLOAT 21Q %%TAN-COMPLEX 13Q \INSTANCE-P) (41Q RADIANS 31Q FLOATP 10Q COMPLEX) ( 46Q (OR COMPLEX NUMBER)) %%TAN-FLOAT D1 (P 4 RECIPFLG P 3 SIGN I 0 X F 5 %%PI F 6 %%PI/2 F 7 %%-PI/4 F 10Q %%TAN-EPSILON F 11Q %%-PI/2 F 12Q %%PI/4) hdd#@XjHohHoHU XddV HUXdW iWHXWiVHXH WKHLkJ JHdYKHI`l2I`l2 ZLkJ J(273Q %%/ 253Q %%/ 172Q %%/ 144Q ABS 45Q REM) (240Q ARRAYP 235Q %%TAN-QPOLY 221Q ARRAYP 216Q %%TAN-PPOLY) ( 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-EPSILON (%%FLOAT 14720 0)) (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)) >@HYdg @ g @ I3@ igHo b(67Q CHECK-TYPE-FAIL 52Q %%ASIN-FLOAT 36Q %%ASIN-COMPLEX 31Q \INSTANCE-P 22Q %%ASIN-FLOAT 14Q \INSTANCE-P) (57Q NUMBER 47Q FLOATP 26Q COMPLEX 11Q FLOATP) ( 64Q (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 F 5 %%PI/2 F 6 %%ASIN-EPSILON) P@ZoJdooJ oJijJZJoioJo VJJ-JdֻJK`l2K`l2 \IULoռHjLռAULL(163Q %%/ 101Q CL:SQRT 32Q ERROR) (150Q ARRAYP 145Q %%ASIN-QPOLY 127Q ARRAYP 124Q %%ASIN-PPOLY) ( 175Q 2.0 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)) @@HYdg @i g @ I3@i igHo b(71Q CHECK-TYPE-FAIL 54Q %%ASIN-FLOAT 37Q %%ACOS-COMPLEX 32Q \INSTANCE-P 23Q %%ASIN-FLOAT 14Q \INSTANCE-P) (61Q NUMBER 50Q FLOATP 27Q COMPLEX 11Q FLOATP) ( 66Q (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 () (RPAQ? %%SQRT3 (%%FLOAT 16349 46039)) (RPAQ? %%2-SQRT3 (%%FLOAT 16009 12451)) (RPAQ? %%INV-2-SQRT3 (%%FLOAT 16494 55788)) 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) F 0 %%SQRT3 F 1 %%2-SQRT3 F 2 %%PI/6 F 3 %%PI/2 F 4 %%INV-2-SQRT3 F 5 %%PI/3) Nj@jd@ Q@@ k@R@PkP@ T@UP@@Pk Sk@ (112Q %%ATAN-FLOAT2 107Q %%/ 77Q %%ATAN-FLOAT2 74Q %%/ 51Q %%ATAN-FLOAT2 46Q %%/ 24Q %%ATAN-FLOAT2 12Q %%ATAN-FLOAT1) NIL () %%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) F 1 %%PI F 2 %%PI/2) A@j@dTd No@HA Hj o Aj @ R@j A jQA @d @A @ Qj@A A j@jA @A Q(216Q %%ATAN-FLOAT1 213Q %%/ 204Q %%ATAN-FLOAT1 201Q %%/ 170Q PLUSP 162Q %%ATAN-FLOAT1 157Q %%/ 146Q PLUSP 141Q %%ATAN-FLOAT1 136Q %%/ 127Q PLUSP 121Q PLUSP 110Q PLUSP 103Q %%= 73Q %%SIGNUM 66Q %%= 60Q CL:ERROR 47Q %%= 40Q %%= 20Q \FZEROP) NIL ( 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. *) (DECLARE: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) LLFLOAT)) (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. *) (* Using INITVARS instead of CONSTANTS in various places here because of problems with the way BYTECOMPILER stores FLOATPs in DCOM files. *) (FNS %%FLOAT) (CONSTANTS (MOST-POSITIVE-FIXNUM 65535) (MOST-NEGATIVE-FIXNUM -65536)) (INITVARS (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))) *) (INITVARS ( 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))) *) (INITVARS ( 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)) (INITVARS (PI (%%FLOAT 16457 4059))) (* Should be ( DECLARE: EVAL@COMPILE DONTCOPY (CONSTANTS ...)) except that compiler does a poor job of compiling FLOATPs. Use an INITVARS to patch around this situation for now. *) (INITVARS (%%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 (INITVARS (%%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 (INITVARS (%%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. *) (INITVARS (%%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. *) (INITVARS (%%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. *) (INITVARS (%%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 *) (INITVARS (%%SQRT3 (%%FLOAT 16349 46039)) (%%2-SQRT3 (%%FLOAT 16009 12451)) (%%INV-2-SQRT3 (%%FLOAT 16494 55788))) (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