--- /dev/null
+/
+/
+/ A L O G
+/ - - - -
+/
+/SUBROUTINE ALOG(X)
+/
+/ VERSION 5A 4-26-77 (MH)
+/
+ SECT ALOG
+ JA #ALOG
+ 0 /WORKING SPACE FOR EXPONENT DIDDLE.
+ 0
+ 0
+ALOGTM, 0
+ 0
+ 0
+ 0
+F2ALOG, F 2.
+FPI2, 1
+ 3110
+ 3755
+/
+ EXTERN #ARGER
+ALOG0, TRAP4 #ARGER
+ JA ALGRTN /RETURN NOW.
+/
+ EXTERN #ARGER
+ALOGM1, TRAP4 #ARGER
+ JA ALGRTN
+ TEXT +ALOG +
+ALOGXR,
+BPALOG, F 0.0
+XRALOG, F 0.0
+ALOG1, F 0.0
+ALOG2, F 0.0
+F1ALOG, F 1.
+/
+ALOGMG, 0
+ 0
+ 13 /CORRECT EXPONENT DIDDLER.
+/
+/
+/
+/
+ALOGL1, 0
+ 3777
+ 7742
+/
+ALOGE2, 0
+ 2613
+ 4414
+/
+ ORG 10*3+BPALOG
+ FNOP
+ JA ALOGXR
+ 0
+ALGRTN, JA .
+ALOGL2, 7777
+ 4000
+ 4100
+/
+ALOGL3, 7777
+ 2517
+ 0310
+/
+ALOGL4, 7776
+ 4113
+ 7211
+/
+ALOGL5, 7776
+ 2535
+ 3301
+/
+ALOGL6, 7775
+ 4746
+ 0771
+/
+ALOGL7, 7774
+ 2236
+ 4304
+/
+ALOGL8, 7771
+ 4544
+ 1735
+ BASE 0
+#ALOG, STARTD
+ FLDA 10*3
+ FSTA ALGRTN
+ FLDA 0
+ SETX XRALOG
+ SETB BPALOG
+ BASE BPALOG
+ LDX 1,1
+ FSTA BPALOG
+ FLDA% BPALOG,1 /ADDR OF X
+ FSTA BPALOG
+ STARTF
+ FLDA% BPALOG /GET X
+ JEQ ALOG0 /IF =0 THEN ERROR
+ JLT ALOGM1 /IF<0 THEN ERROR
+ LDX -1,0 /IF >0 THEN START DOING
+ FSTA ALOG1 /SAVE IN A TEMP.
+ FSUB F1ALOG /KNOCK OFF ONE.
+ JEQ ALGRTN /IF ZERO EXIT. LOG(1)=0
+ JGE ALOGST /IF POSITIVE LOG>0
+ FLDA F1ALOG /NEGITE. INVERT IT.
+ FDIV ALOG1 /BY DIVIDING INTO ONE.
+ FSTA ALOG1
+ LDX 0,0 /RESET SIGN TO NEGATIVE.
+ JA .+3 /AVOID USELESS LOAD INSTRUCTION.
+/
+ALOGST, FLDA ALOG1 /RECALL NUMBER.
+ FDIV F2ALOG /CUT IN HALF.
+ FSTA ALOGTM /PREPARE FOR EXPONENT DIDDLE.
+ FLDA ALOGMG /SET THE EXPONENT OF THE EXPONENT TO 13.
+ FSTA ALOGTM-3 /SO THAT NORMALIZE WILL DO JOB.
+ FSTA ALOGTM+1 /AND ALSO ZERO OUT LOW ORDER POART OF EX. MANT.
+ FLDA ALOGTM-1 /RECALL THE NUMBER
+ FNORM /NORMALIZE IT.
+ FMUL ALOGE2 /NOW MULITPLY EXPONENT BY LOG E 2
+ FSTA ALOG2 /AND SAVE IT FOR A SECOND.
+ FLDA ALOG1 /RECALL THE NUMBER AGAIN.
+ FSTA ALOGTM /STORE IN THE TEMPORARY WORKER.
+ FLDA FPI2-2 /RECALL WORD WITH LOW ORDER ONE.
+ FSTA ALOGTM-2 /STORE AWAY.
+ FLDA ALOGTM /RECALL NUMBER WITH AN EXPONENT OF 1
+ FSUB F1ALOG /SUBTRACT AWAY.
+ FSTA ALOG1 /AND STORE
+ FMUL ALOGL8 /MULTIPLY BY THE CONSTANT.
+ FADD ALOGL7 /ADD IN
+ FMUL ALOG1 /MULT.
+ FADD ALOGL6 /AND SO ON DOWN THE LINE.
+ FMUL ALOG1
+ FADD ALOGL5
+ FMUL ALOG1
+ FADD ALOGL4
+ FMUL ALOG1
+ FADD ALOGL3
+ FMUL ALOG1
+ FADD ALOGL2
+ FMUL ALOG1
+ FADD ALOGL1
+ FMUL ALOG1
+ FADD ALOG2 /CORRECT NOW.ADD IN EXPONENT.
+ JXN ALGRTN,0 /EXIT IF SIGN IS OK.
+ FNEG /ELSE NEGATE IT.
+ JA ALGRTN
+\f