/ 
/ 
/                   FIRST PRINTING, FEBRUARY 1974
/ 
/ THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO 
/ CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED
/ AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
/ DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON-
/ SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS
/ DOCUMENT.
/ 
/ THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR-
/ NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON
/ A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH
/ INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR 
/ USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO-
/ VIDED IN WRITING BY DIGITAL.
/ 
/ DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/ FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP-
/ MENT THAT IS NOT SUPPLIED BY DIGITAL.
/ 
/ COPYRIGHT (C) 1974, BY DIGITAL EQUIPMENT CORPORATION
/ 
/ 
        .EJECT
/COPYRIGHT 1970,1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
/EDIT 5  2-17-71
/FOR HARDWARE FLOATING POINT PROCESSOR (FPP), DEFINE % FPP,
       .TITLE .BF    RAISE REAL BASE(A) TO DOUBLE POWER (B)  A**B
       .GLOBL .BF,.CB,.DE,.DF,.ER,
	.IFUND %FPP
	.GLOBL .AB,.AS
	.ENDC
	.IFUND %FPP
	.DEFIN DMP%,A
	JMS* A			/DOUBLE MULTIPLY (.AS)
	.ENDM
	.ENDC
	.IFDEF %FPP
DMP=711540
	.DEFIN DMP%
	DMP
	.ENDM
	.ENDC
/             CALLING SEQUENCE   (A**B = EXP(B * LOGE(A)))
/      JMS*   (.BF)           SUBR CALL (A IN FLOAT ACC)
/      CAL/XCT ADDR           ADDR OF B (XCT IF INDIRECT
/      NEXT   INSTRUCTION     SUBR RETURN (RESULT IN FLOAT ACC)
/DIRECT ASSIGN. FOR FPP
	.IFDEF %FPP
BNA=716610
	.ENDC
/
.BF    CAL    0              /ENTRY-EXIT
       JMS*   .CB            /SHORT GET ARG (.CB)
BF02   CAL    0              /ADDR OF ARG B
	.IFDEF %FPP
	BNA			/BR IF NON-0
	BF06
	.ENDC
	.IFUND %FPP
	LAC* .AB		/GET BASE
	SZA
	JMP BF06
	.ENDC
	ISZ BF02		/PASS BY EXP.
	LAC* BF02
	SPA!SNA!CLA
	JMS* .ER		/OTS 15
	AND 15			/DUMMY INSTR.
	JMP* .BF		/ANS=BASE
BF06	JMS*   .DE            /COMPUTE LOG2(A)
       DMP%   .AS            /MULTIPLY DOUBLE (.AS)
       .DSA   BF05           / (LOG2(A) * LOGE(2) = LOGE(A))
       DMP%   .AS            /MULTIPLY DOUBLE (.AS)
       .DSA   BF02+400000    / (B X LOGE(A))
       JMS*   .DF            /COMPUTE EXP (.DF) (EXP(B * LOGE(A)))
       JMP*   .BF            /EXIT
BF05          0              /LOGE(2) (1)  (0.6931471806)
              261344         /        (2)
              137700         /        (3)
       .END
	JMP* .BF		/ANS=BASE
BF06	JMS*   .DE            /COMPUTE LOG2(A)
       DMP%   .AS            /MULTIPLY DOUBLE (.AS)
       .DSA   BF05           / (LOG2(A) * LOGE(2) = LOGE(A))
       DMP%   .AS            /MULTIPLY DOUBLE (.AS)
       .DSA   BF02+400000    / (B X LOGE(A))
       JMS*   .DF            /COMPUTE EXP (.DF) (EXP(B * LOGE(A)))
       JMP*   .BF            /EXIT
BF05          0              /LOGE(2) (1)  (0.6931471806)
              261344         /        (2)
              137700         /        (3)
       .END
