--- /dev/null
+/
+/
+/ S I N H
+/ - - - -
+/
+/SUBROUTINE SINH(X)
+/
+/ VERSION 5A 4-27-77 PT
+/
+ SECT SINH
+ JA #SINH
+ TEXT +SINH +
+SINHXR, SETX XRSINH
+ SETB BPSINH
+BPSINH, FNOP
+ 0
+ 0
+XRSINH, F 0.0
+SINH6, F 0.0
+SINH7, F 0.0
+SINH8, F 0.0
+F1SINH, F 1.
+F2SINH, F 2.
+ ORG 10*3+BPSINH
+ FNOP
+ JA SINHXR
+ 0
+SNHRTN, JA .
+/
+SINHLG, 0
+ 2613
+ 4412
+/
+SINH1, F .1
+/
+SINH2, F 87.929
+/
+SINH3, F 6.
+/
+SINH4, F 120.
+ BASE 0
+#SINH, STARTD
+ FLDA 10*3
+ FSTA SNHRTN
+ FLDA 0
+ SETX XRSINH
+ SETB BPSINH
+ BASE BPSINH
+ LDX 1,1
+ FSTA BPSINH
+ FLDA% BPSINH,1 /ADDR OF X
+ FSTA BPSINH
+ STARTF
+ FLDA% BPSINH /GET X
+ FSTA SINH8 /SAVE THE ARGUMENT.
+ JGE .+3 /MAKE IT POSITIVE.
+ FNEG
+ FSTA SINH7 /AND SAVE ABS VALUE IN CASE WE NEED IT.
+ FSUB SINH1 /IS IT LESS THEN .1?
+ JLE SINHSR /YES. USE SERIES APPROXIMATION.
+ FSUB SINH2 /IS IT GREATER THEN 88.029?
+ JGE SINHAP /YES. USE LOG(2) APPROXIMATION.
+ EXTERN EXP
+ JSR EXP /EXP(X)
+ JA .+4
+ JA SINH8
+ FSTA SINH7
+ FLDA F1SINH
+ FDIV SINH7 /1/EXP(X)
+ FNEG /-1/EXP(X)
+ FADD SINH7 /EXP(X)-1/EXP(X)
+ FDIV F2SINH / 1/2(EXP(X)-1/EXP(X))
+ JA SNHRTN /AND RETURN NOW.
+/
+/
+SINHAP, FLDA SINH7 /RECALL ABSOULTE VALUE.
+ FSUB SINHLG /ABS(X)-LN(2)
+ FSTA SINH7 /EXP(ABS(X)-LN(2))
+ EXTERN EXP
+ JSR EXP
+ JA .+4
+ JA SINH7
+ FSTA SINH7
+ FLDA SINH8 /GET SIGN OF ARGUMENT.
+ JGE SPLR /LOAD POSITIVE IF ARG WAS POSITIVE.
+ FLDA SINH7
+ FNEG /ELSE NEGATE IT.
+ JA SNHRTN /AND RETURN.
+SPLR, FLDA SINH7
+ JA SNHRTN
+/
+/
+SINHSR, FLDA SINH8 /X SERIES IF X<.1
+ FMUL SINH8 /X^2
+ FSTA SINH7 /X^2
+ FMUL SINH8 /X^3
+ FSTA SINH6 /X^3
+ FMULM SINH7 /X^5
+ FDIV SINH3 /X^3/6
+ FADDM SINH8 /X+X^3/6
+ FLDA SINH7 /X^5
+ FDIV SINH4 /X^5/120
+ FADD SINH8 /X+X^3/6+X^5/120
+ JA SNHRTN /VOILA. WE ARE DONE.
+\f