/COPYRIGHT 1970, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. /EDIT 2 9-25-70 .TITLE .BD RAISE DOUBLE BASE (A) TO INTEGER POWER (B) A**B .GLOBL .BD,.DE,.AS,.AP,.AW,.DF,.AB,.ER / CALLING SEQUENCE (A**B = EXP(B * LOGE(A))) / JMS* (.BD) SUBR CALL (A IN FLOAT ACC) / LAC(*) ADDR ADDR OF B (* IF INDIRECT) / NEXT INSTRUCTION SUBR RETURN (RESULT IN FLOAT ACC) / .BD CAL 0 /ENTRY-EXIT LAC* .AB DAC BD01 /SAVE BASE SIGN AND (377777) SZA /IS BASE 0? JMP BD10 XCT* .BD /EXAMINE EXP. SPA!SNA!CLA JMS* .ER /EXP<-0 AND 15 /DUMMY INSTRUCT. JMP BD11 /ANSWER=BASE BD10 DAC* .AB /ABSOLUTE BASE JMS* .DE /COMPUTE LOG2(A) (.DE) JMS* .AS /MULTIPLY DOUBLE (.AS) .DSA BD05 / (LOG2(A) * LOGE(2) = LOGE(A)) JMS* .AP /STORE DOUBLE (.AP) .DSA BD07 /(TEMP) XCT* .BD /GET EXP JMS* .AW / FLOAT B (.AW) JMS* .AS /MULTIPLY DOUBLE (.AS) .DSA BD07 / (B * LOGE(A)) JMS* .DF /COMPUTE EXP (.DF) (EXP(B * LOGE(A))) XCT* .BD RTR AND BD01 /DETERMINE ANSWER SIGN AND (400000) /AS (-1) ** POWER XOR* .AB DAC* .AB /SET ANSWER SIGN BD11 ISZ .BD /BUMP EXIT JMP* .BD /EXIT BD05 0 /LOGE(2) (1) (0.6931471806) 261344 / (2) 137700 / (3) BD07 CAL 0 /TEMP (1) L CAL 0 / (2) CAL 0 / (3) BD01 .DSA 0 .END