A large commit.
[pdp8.git] / sw / os8 / v3d / sources / fortran / dectapes / dectape2 / dlog.ra
diff --git a/sw/os8/v3d/sources/fortran/dectapes/dectape2/dlog.ra b/sw/os8/v3d/sources/fortran/dectapes/dectape2/dlog.ra
new file mode 100644 (file)
index 0000000..00a6fe7
--- /dev/null
@@ -0,0 +1,234 @@
+/
+/
+/      D L O G
+/      - - - -
+/
+/ VERSION 5A 4-27-77  PT
+/
+/LOGE(X)
+/
+/X=2^N*F
+/
+/LOGE(X)
+ /= N*LOGE(2)+LOGE(F)
+/
+/
+       SECT    DLOG
+       JA      #DALOG
+       DPCHK
+/
+/IF X<=0 - IT IS AN ERROR
+       EXTERN  #ARGER
+DALERR,        TRAP4   #ARGER
+/
+       TEXT    +DLOG  +
+DALXR, SETX    XRDAL
+       SETB    BPDAL
+BPDAL, F 0.0
+XRDAL, F 0.0
+       F 0.0
+       ORG 10*3+BPDAL
+       FNOP
+       JA      DALXR
+       0
+DALRTN,        JA      .
+N,     F 0.0
+       F 0.0
+F,     F 0.0
+       F 0.0
+DAL1,  F 1.0
+       F 0.0
+/
+DT7,   7776            /1/7
+       2222
+       2222
+       2222
+       2222
+       2221
+DT6,   7776            /-1/6
+       5252
+       5252
+       5252
+       5252
+       5252
+DT5,   7776            /1/5
+       3146
+       3146
+       3146
+       3146
+       3146
+DT4,   7776            /-1/4
+       4000
+       0
+       0
+       0
+       0
+DT3,   7777            /1/3
+       2525
+       2525
+       2525
+       2525
+       2524
+DT2,   7777            /-1/2
+       4000
+       0
+       0
+       0
+       0
+/
+A0,    F 1.84375
+       F 0.0
+A1,    F 1.65625
+       F 0.0
+A2,    F 1.500
+       F 0.0
+A3,    F 1.375
+       F 0.0
+A4,    F 1.250
+       F 0.0
+A5,    F 1.1875
+       F 0.0
+A6,    F 1.09375
+       F 0.0
+A7,    F 1.03125
+       F 0.0
+LA0,   0               /.6118015411059928976
+       2344
+       7603
+       2325
+       4250
+       3144
+LA1,   0               /.5045560107523952859
+       2011
+       2512
+       4551
+       3503
+       7657
+LA2,   7777            /.4054651081081643810
+       3174
+       6217
+       5457
+       7141
+       1370
+LA3,   7777            /.3184537311185346147
+       2430
+       3057
+       0207
+       0573
+       0232
+LA4,   7776            /.2231435513142097553
+       3443
+       7737
+       0746
+       5150
+       4146
+LA5,   7776            /.1718502569266592214
+       2577
+       6301
+       6051
+       7117
+       2356
+LA6,   7775            /.08961215868968712374
+       2674
+       1512
+       1271
+       2655
+       1272
+LA7,   7773            /.030771658666753687
+       3740
+       5154
+       1636
+       0313
+       7764
+D16,   F 16.0
+       F 0.0
+D8,    F 8.0
+       F 0.0
+CUM,   F 0.0
+       F 0.0
+DLOGE2,        0
+       2613
+       4413
+       7676
+       4347
+       5715
+/
+/PICK UP X
+       BASE    0
+#DALOG,        STARTD
+       FLDA    10*3
+       FSTA    DALRTN
+       FLDA    0
+       SETX    XRDAL
+       SETB    BPDAL
+       BASE    BPDAL
+       LDX     1,1
+       FSTA    BPDAL
+       FLDA%   BPDAL,1         /ADDRESS
+       FSTA    BPDAL
+       STARTE
+       FLDA%   BPDAL           /AND X
+       JLE     DALERR          /X <= 0 IS ERROR
+       FSUB    DAL1            /SUB 1.0
+       JNE     DALA
+       FCLA                    /LOG(1)=0
+       JA      DALRTN
+/
+DALA,  FADD    DAL1            /ADD BACK
+       FSTA    XRDAL           /STORE AT X
+/EXPONENT STORED IN XR0
+/MANTISSA STORED IN XR1-5
+/PICK UP EXP + MULTIPLY BY LOGE(2)
+/
+       XTA     0
+       FMUL    DLOGE2
+       FSTA    N               /N*LOGE(2)
+/XRDAL IS NOW FRACTION IN RANGE .5<=F<1.0
+/COMPUTE LOG(F) BY
+/LOG(F)=LOG(A(K1)*A(K2)...(F))-(LOG(A(K1))+
+/      LOG(A(K2))...)
+/FIT F IN A 1/16 RANGE
+/I.E. 1/2-9/16,9/16-10/16,ETC.
+/MULTIPLY F BY APPROPRIATE A(K) MULTIPLIER
+/KEEP RUNNING SUM OF LOG(A(K))
+/CONTINUE UNTIL F>1
+
+/
+       LDX     0,0
+       FLDA    XRDAL
+       FSTA    F
+       FCLA
+       FSTA    CUM
+DALB,  FLDA    F
+       FMUL    D16     /16 REAL PARTS
+       FSUB    D8              /NEED JUST 8
+       ATX     1
+       FLDA    A0,1            /GET MULTIPLIER
+       FMULM   F
+       FLDA    LA0,1           /ADD LOG(A(K)) TO SUM
+       FADDM   CUM
+       FLDA    F
+       FSUB    DAL1
+       JLT     DALB
+/NOW F>1. USE TAYLOR SERIES
+/LOG(T)=Z-(Z^2)/2+(Z^3)/3+...  WHERE Z=T-1
+       FLDA    F
+       FSUB    DAL1    /F-1.0
+       FSTA    F
+       FMUL    DT7
+       FADD    DT6
+       FMUL    F
+       FADD    DT5
+       FMUL    F
+       FADD    DT4
+       FMUL    F
+       FADD    DT3
+       FMUL    F
+       FADD    DT2
+       FMUL    F
+       FADD    DAL1
+       FMUL    F
+       FSUB    CUM
+       FADD    N
+       JA      DALRTN
+\f