software: Added more and more
[pdp8.git] / sw / f4 / FRTSRC / sinh.ra
diff --git a/sw/f4/FRTSRC/sinh.ra b/sw/f4/FRTSRC/sinh.ra
new file mode 100644 (file)
index 0000000..1c300a3
--- /dev/null
@@ -0,0 +1,105 @@
+/
+/
+/      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