software: Added more and more
[pdp8.git] / sw / f4 / FRTSRC / sinh.ra
1 /
2 /
3 / S I N H
4 / - - - -
5 /
6 /SUBROUTINE SINH(X)
7 /
8 / VERSION 5A 4-27-77 PT
9 /
10 SECT SINH
11 JA #SINH
12 TEXT +SINH +
13 SINHXR, SETX XRSINH
14 SETB BPSINH
15 BPSINH, FNOP
16 0
17 0
18 XRSINH, F 0.0
19 SINH6, F 0.0
20 SINH7, F 0.0
21 SINH8, F 0.0
22 F1SINH, F 1.
23 F2SINH, F 2.
24 ORG 10*3+BPSINH
25 FNOP
26 JA SINHXR
27 0
28 SNHRTN, JA .
29 /
30 SINHLG, 0
31 2613
32 4412
33 /
34 SINH1, F .1
35 /
36 SINH2, F 87.929
37 /
38 SINH3, F 6.
39 /
40 SINH4, F 120.
41 BASE 0
42 #SINH, STARTD
43 FLDA 10*3
44 FSTA SNHRTN
45 FLDA 0
46 SETX XRSINH
47 SETB BPSINH
48 BASE BPSINH
49 LDX 1,1
50 FSTA BPSINH
51 FLDA% BPSINH,1 /ADDR OF X
52 FSTA BPSINH
53 STARTF
54 FLDA% BPSINH /GET X
55 FSTA SINH8 /SAVE THE ARGUMENT.
56 JGE .+3 /MAKE IT POSITIVE.
57 FNEG
58 FSTA SINH7 /AND SAVE ABS VALUE IN CASE WE NEED IT.
59 FSUB SINH1 /IS IT LESS THEN .1?
60 JLE SINHSR /YES. USE SERIES APPROXIMATION.
61 FSUB SINH2 /IS IT GREATER THEN 88.029?
62 JGE SINHAP /YES. USE LOG(2) APPROXIMATION.
63 EXTERN EXP
64 JSR EXP /EXP(X)
65 JA .+4
66 JA SINH8
67 FSTA SINH7
68 FLDA F1SINH
69 FDIV SINH7 /1/EXP(X)
70 FNEG /-1/EXP(X)
71 FADD SINH7 /EXP(X)-1/EXP(X)
72 FDIV F2SINH / 1/2(EXP(X)-1/EXP(X))
73 JA SNHRTN /AND RETURN NOW.
74 /
75 /
76 SINHAP, FLDA SINH7 /RECALL ABSOULTE VALUE.
77 FSUB SINHLG /ABS(X)-LN(2)
78 FSTA SINH7 /EXP(ABS(X)-LN(2))
79 EXTERN EXP
80 JSR EXP
81 JA .+4
82 JA SINH7
83 FSTA SINH7
84 FLDA SINH8 /GET SIGN OF ARGUMENT.
85 JGE SPLR /LOAD POSITIVE IF ARG WAS POSITIVE.
86 FLDA SINH7
87 FNEG /ELSE NEGATE IT.
88 JA SNHRTN /AND RETURN.
89 SPLR, FLDA SINH7
90 JA SNHRTN
91 /
92 /
93 SINHSR, FLDA SINH8 /X SERIES IF X<.1
94 FMUL SINH8 /X^2
95 FSTA SINH7 /X^2
96 FMUL SINH8 /X^3
97 FSTA SINH6 /X^3
98 FMULM SINH7 /X^5
99 FDIV SINH3 /X^3/6
100 FADDM SINH8 /X+X^3/6
101 FLDA SINH7 /X^5
102 FDIV SINH4 /X^5/120
103 FADD SINH8 /X+X^3/6+X^5/120
104 JA SNHRTN /VOILA. WE ARE DONE.
105 \f