--- /dev/null
+ SECT #EXPDI
+/ B**E
+/ WHERE E IS INTEGER
+/ AND B IS DOUBLE PRECISION
+/
+/ VERSION 5A 4-26-77 MH
+/
+ DPCHK
+ BASE 0
+EXPDI, JA .
+ FSTA SIGN /SAVE SIGN OF EXPONENT
+ JGE POSINT /ITS POSITIVE
+ FNEG
+POSINT, FSTA EXP
+ XTA 1 /SAVE XR 1
+ FSTA XR1
+ LDX -27,1 /BIT COUNT
+ STARTE
+ FLDA ONE /START WITH ONE
+ FSTA PROD
+ STARTF
+ FLDA EXP
+LOOP, JEQ YES /DONE IF ITS ZERO
+ FDIV TWO /DIVIDE BY TWO
+ ALN 0 /INTEGERIZE
+ FNORM
+ FSTA TEMP /SAVE AT
+ FMUL TWO /IS EXPONENT ODD ?
+ FSUB EXP
+ STARTE
+ JLT ODD /YES, JUMP
+ FLDA 0 /SQUARE BASE
+SQUARE, FMULM 0
+ STARTF
+ FLDA TEMP /EXPONENT OVER 2
+ FSTA EXP
+ JXN LOOP,1+ /LOOP IF MORE BITS
+YES, FLDA XR1 /DONE, RESTORE XR 1
+ ATX 1
+ FLDA SIGN /CHECK SIGN OF EXPONENT
+ JLT INVERT /IT WS NEGATIVE, INVERT RESULT
+ STARTE
+ FLDA PROD /RETURN ANSWER
+ JA EXPDI
+INVERT, STARTE
+ FLDA ONE /RETURN WITH 1/PROD
+ FDIV PROD
+ JA EXPDI
+ODD, FLDA 0
+ FMULM PROD
+ JA SQUARE /GO SQUARE THE BASE
+ONE, F 1.0
+ F 0.0
+TWO, F 2.0
+PROD, F 0.0
+ F 0.0
+SIGN, F 0.0
+TEMP, F 0.0
+XR1, F 0.0
+EXP, F 0.0
+ F 0.0
+ END
+\f