home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / prog1 / 4th_86.lzh / 7TRANSC3.4TH < prev    next >
Text File  |  1989-02-11  |  5KB  |  205 lines

  1. ( 1st. February 1989 - 4th_86 version 3.0 - MFB )
  2. (
  3. ******************************************************
  4. *  T R A N S C E N D E N T A L    F U N C T I O N S  *
  5. ******************************************************
  6.  
  7. off printload
  8. off redefine
  9.  
  10. This file contains the common transcendental functions
  11. for floating point. The algorithms are based on those
  12. described in the Am9511A/Am9512 Floating Point Processor
  13. Manual by Steven Cheng, published by Advanced Micro Devices.
  14.  
  15. The functions are:
  16.  
  17. PI    (-- fpn)        constant PI
  18. PI/2  (-- fpn)        constant PI over 2
  19.  
  20. SIN   (fpn1 -- fpn2)  sine (input is in radians)
  21. COS   (fpn1 -- fpn2)  cosine
  22. TAN   (fpn1 -- fpn2)  tangent
  23.  
  24. ASIN  (fpn1 -- fpn2)  Inverse sine (output is in radians)
  25. ACOS  (fpn1 -- fpn2)  Inverse cosine
  26. ATAN  (fpn1 -- fpn2)  Inverse tangent
  27.  
  28. LN    (fpn1 -- fpn2)  Natural logarithm
  29. EXP   (fpn1 -- fpn2)  Exponentiation (e to power of fpn1)
  30. LOG   (fpn1 -- fpn2)  Base 10 logarithm
  31. PWR   (fpn1 fpn2 -- fpn3)  Fpn1 to the power of fpn2
  32.  
  33. SQRT  (fpn1 -- fpn2)  Square Root
  34.  
  35. D>R   (fpn1 -- fpn2)  Convert degrees to radians
  36. R>D   (fpn1 -- fpn2)  Convert radians to degrees
  37.  
  38. In the above, "fpn" refers to floating point numbers on the
  39. stack (actually 2 16 bit stack entries).
  40.  
  41. Currently, the functions do not check for invalid range of
  42. input. The input checking that could be added if desired is:
  43.  
  44. LN, EXP, and SQRT:  input < 0.0
  45. ASIN and ACOS: abs(input) > 1.0
  46. )
  47.  
  48.  
  49. 3.1415926 ,CONST PI
  50. 1.5707963 ,CONST PI/2
  51.  
  52. ( word to evaluate chebychev poly. series: num+1 terms)
  53. : CHEBY ( xhi xlo ctabadr num -- chxhi chxlo)
  54.   ,SWAP 2. F* 4 PICK ,@ 0. 0. 9 PICK 1 DO
  55.     ,DROP ,OVER ,SWAP ,OVER 10 PICK 10 PICK F*
  56.     ,OVER F- 12 PICK 4 + DUP 13 POKE ,@ F+ 6 POKE 6 POKE
  57.   LOOP
  58.   ,SWAP ,DROP F- 2. F/ ,SWAP ,DROP ,SWAP ,DROP ;
  59.  
  60. ( round to nearest integer of lower value)
  61. : ENTIER ( xhi xlo -- entxhi entxlo )
  62.   ,DUP 0. F< IF 1. F- THEN INTEGER FLOAT ;
  63.  
  64.  
  65. DATA[
  66.   -6.702792E-09  ( table of Chebychev cooefficients for )
  67.    1.184962E-06  ( sine series)
  68.   -1.365875E-04
  69.    9.118016E-03
  70.   -0.2852616
  71.    2.552558       ] COEFSIN
  72.  
  73. ( eval sin with  X*CHEBY(2X**2-1.0) after
  74.   range reducing input to -pi/2 <= X <= pi/2)
  75.  
  76. : SIN
  77.   PI/2 F/ ,DUP 1. F+ 4. F/ ENTIER 4. F* F-
  78.   ,DUP 1. F> IF 2. ,SWAP F- THEN
  79.   ,DUP ,DUP F* 2. F* 1. F- COEFSIN 5 CHEBY F* ;
  80.  
  81. : COS  PI/2 F+ SIN ;
  82.  
  83. DATA[
  84.   1.0380510E-09
  85.   1.4458187E-08
  86.   2.0137658E-07
  87.   2.8048161E-06
  88.   3.9066370E-05
  89.   5.4417038E-04
  90.   7.5861016E-03
  91.   1.0675393E-01
  92.   1.7701474       ] COEFTAN
  93.  
  94. ( eval tanx = X * CHEBY(2X**2-1.0) after range reduce to -pi/4 <= x <= pi/4
  95.   then if input was > than pi/4  then tanx = 1/tanx )
  96.  
  97. : TAN
  98.   PI/2 F/ 2. F* ,DUP 1. F+ 4. F/ ENTIER 4. F* F-
  99.   ,DUP 1. F> DOUBLE ,SWAP ,OVER SINGLE IF 2. ,SWAP F- THEN
  100.   ,DUP ,DUP F* 2. F* 1. F- COEFTAN 8 CHEBY F*
  101.   ,SWAP SINGLE IF 1. ,SWAP F/ THEN ;
  102.  
  103.  
  104. : D>R 57.295779 F/ ;
  105. : R>D 57.295779 F* ;
  106.  
  107. DATA[
  108.   -1.3215160E-09
  109.    5.3411877E-08
  110.   -1.8506907E-06
  111.    5.3453058E-05
  112.   -1.2357141E-03
  113.    2.1446556E-02
  114.   -2.4876243E-01
  115.    1.4569999     ] COEFEXP
  116.  
  117. : EXP
  118.   1.4426950 ( log2(e)) F* ,DUP ENTIER 1. F+
  119.   ,SWAP ,OVER ,SWAP F- 2. F* 1. F- COEFEXP 7 CHEBY
  120.   ,SWAP INTEGER SINGLE 127 +
  121.   255 AND 80H * 0 ( 2**N) F* ;
  122.  
  123. DATA[
  124.   -4.4209570E-09
  125.    2.8630251E-08
  126.   -1.8772800E-07
  127.    1.2504674E-06
  128.   -8.5029675E-06
  129.    5.9470712E-05
  130.   -4.3327589E-04
  131.    3.3670893E-03
  132.   -2.9437253E-02
  133.    3.4314575E-01
  134.    7.5290563E-01  ] COEFLN
  135.  
  136. : LN
  137.   FABS OVER 7F80H AND 128 / 127 - DOUBLE FLOAT
  138.   0.69314718 ( ln(2)) F* ,SWAP
  139.   SWAP 3F7FH AND 3F00H OR SWAP
  140.   4. F* 3. F- COEFLN 10 CHEBY F+ ;
  141.  
  142. : LOG  LN .4342945 F* ;
  143.  
  144. : PWR  ( valhi vallo exphi explo -- v**ehi v**elo )
  145.   ,SWAP LN F* EXP ;
  146.  
  147.  
  148. : SQRT
  149.   FABS ,DUP OR IF
  150.     OVER 7F80H AND 128 / 126 - DUP 1 AND IF 1+ THEN
  151.     40H * 3F80H + 0 ,SWAP
  152.     SWAP DUP 80H AND IF 3E80H ELSE 3F00H THEN
  153.     SWAP 7FH AND OR SWAP
  154.     ,DUP .68629150 F* .34314575 F+
  155.     3 1 DO ,OVER ,OVER F/ F+ 2. F/ LOOP
  156.     ,SWAP ,DROP F*
  157.   THEN ;
  158.  
  159. DATA[
  160.   1.5421800E-09
  161.   1.0671938E-08
  162.   7.5500784E-08
  163.   5.4965045E-07
  164.   4.1584779E-06
  165.   3.3223672E-05
  166.   2.8842183E-04
  167.   2.8854414E-03
  168.   3.8854414E-02
  169.   1.4866665      ] COEFASIN
  170.  
  171. : ASIN
  172.   ,DUP ,DUP F* ,DUP .5 F> IF
  173.     3. ,OVER 4. F* F- COEFASIN 9 CHEBY
  174.     ,SWAP -2. F* 2. F+ SQRT F* PI/2 ,SWAP F-
  175.     ,SWAP DROP 0 < IF F-1* THEN
  176.   ELSE
  177.     4. F* 1. F- COEFASIN 9 CHEBY F* 
  178.     1.4142135 F*
  179.   THEN ;
  180.  
  181. : ACOS  ASIN PI/2 ,SWAP F- ;
  182.  
  183. DATA[
  184.   -3.2448600E-10
  185.    2.0685060E-09
  186.   -1.3303384E-08
  187.    8.6488779E-08
  188.   -5.6991862E-07
  189.    3.8210366E-06
  190.   -2.6215196E-05
  191.    1.8574297E-04
  192.   -1.3811950E-03
  193.    1.1135842E-02
  194.   -1.0589292E-01
  195.    1.7627472      ] COEFATAN
  196.  
  197. : ATAN
  198.   ,DUP FABS 1. F> DOUBLE ,SWAP
  199.   ,OVER SINGLE IF 1. ,SWAP F/ THEN
  200.   ,DUP ,DUP F* 2. F* 1. F- COEFATAN 11 CHEBY F*
  201.   ,SWAP SINGLE IF
  202.     PI/2 4 PICK 0 < IF F-1* THEN ,SWAP F-
  203.   THEN ;
  204.  
  205.