--- /dev/null
+ SECT #EXPII
+/ B**E
+/ WHERE E IS INTEGER
+/ AND B IS REAL OR INTEGER
+/
+/ VERSION 5A 4/26/77 MH
+/
+ BASE 0
+ JA .
+ FSTA SIGN /SAVE SIGN OF EXPONENT
+ JGE POSINT /ITS POSITIVE
+ FNEG
+POSINT, FSTA 3 /PUT IT INTO 3
+ XTA 1 /SAVE XR 1
+ FSTA XR1
+ LDX -27,1 /BIT COUNT
+ FLDA ONE /START WITH ONE
+ FSTA PROD
+ FLDA 3 /GET EXPONENT
+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 3
+ JLT ODD /YES, JUMP
+ FLDA 0 /SQUARE BASE
+SQUARE, FMULM 0
+ FLDA TEMP /EXPONENT OVER 2
+ FSTA 3
+ 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
+ FLDA PROD /RETURN ANSWER
+ JA #EXPII
+INVERT, FLDA ONE /RETURN 1/PROD
+ FDIV PROD
+ JA #EXPII
+ODD, FLDA 0 /MULT PROD BY BASE
+ FMULM PROD
+ JA SQUARE /GO SQUARE THE BASE
+ONE, F 1.0
+TWO, F 2.0
+PROD, F 0.0
+SIGN, F 0.0
+TEMP, F 0.0
+XR1, F 0.0
+ END
+\f