.TITLE P$ATAN - ARCTAN .IDENT /790817/ ; USAGE: ; Y := ARCTAN(X) ; REAL PARAMETER X ON TOP OF STACK ; REAL RESULT RETURNED ON TOP OF STACK ; REGISTER USAGE: ; R0,R1 - SCRATCH ; R3,R4 - SCRATCH (SAVED/RESTORED) ; .PSECT $$$106::;ARCTAN(X) MOV 2(SP),R0 ;HIGH ARG MOV 4(SP),R1 ;LOW ARG MOV R4,-(SP) ;SAVE R4 MOV R3,-(SP) ;SAVE R3 CLR -(SP) ;CLEAR SIGN FLAG CLR -(SP) ;CLEAR QUADRANT BIAS CLR -(SP) ;; MOV R1,-(SP) ;LOW ORDER ARG MOV R0,-(SP) ;HIGH ORDER ARG BGE 1$ ;QUADRANT 1 OR 3 ADD #100000,(SP) ;GET ABS VALUE INC 10(SP) ;FLAG - 1$: CMP (SP),#40200 ;CHECK IF < 1. BLO 3$ ;< 1. BGT 2$ ;> 1. TST 2(SP) ;CHECK LOW ORDER BEQ 3$ ;= 1. 2$: MOV #140311,4(SP) ;-PI/2 MOV #7733,6(SP) ;ARCTAN(X)=PI/2-ARCTAN(1/X) DEC 10(SP) ;ADJUST SIGN MOV 2(SP),-(SP) ;COPY ARG MOV 2(SP),-(SP) ;; MOV #40200,4(SP) ;INSERT 1. CLR 6(SP) ;; FDIV SP ;1./X 3$: MOV 2(SP),-(SP) ;COPY ARG MOV 2(SP),-(SP) ;; CLR 4(SP) ;INSERT 0.0 CLR 6(SP) ;; CMP (SP),#37661 ;TAN(15) BLO 5$ ;< TAN(15) BHI 4$ ;> TAN(15) CMP 2(SP),#30243 ;=? BLOS 5$ 4$: MOV #40006,4(SP) ;INSERT PI/6 MOV #5222,6(SP) ;; MOV (SP),R0 ;ARG TO REGS MOV 2(SP),R1 ;; MOV #131727,-(SP) ;PUSH -ROOT3 MOV #140335,-(SP) ;; MOV R1,-(SP) ;PUSH ARG MOV R0,-(SP) ;; CLR -(SP) ;PUSH 1. MOV #40200,-(SP) ;; MOV #131727,-(SP) ;PUSH ROOT3 MOV #40335,-(SP) ;; MOV R1,-(SP) ;PUSH ARG MOV R0,-(SP) ;; FMUL SP ;(ROOT3*X-1.)/(ROOT3+X) FSUB SP ;; MOV (SP)+,10.(SP) ;MOVE STACK ITEM UP MOV (SP)+,10.(SP) ;; FSUB SP ;; FDIV SP ;; 5$: MOV (SP),R0 ;GET ARG MOV 2(SP),R1 ;; MOV R1,-(SP) ;GET THREE COPIES MOV R0,-(SP) ;; MOV R1,-(SP) ;; MOV R0,-(SP) ;; FMUL SP ;ARG**2 MOV (SP)+,R0 ;POP POLY ARG MOV (SP)+,R1 ;; MOV #CONSTS+4,R4 ;POINT TO COEFFICIENT TABLE MOV #5,R3 ;LOOP 5 BR 7$ 6$: MOV R1,-(SP) ;PUSH ARG MOV R0,-(SP) ;; 7$: MOV -(R4),-(SP) ;PUSH COEFFICIENT MOV -(R4),-(SP) ;; SOB R3,6$ ;LOOP MOV #5,R3 ;LOOP 5 8$: FMUL SP FADD SP SOB R3,8$ ;LOOP FADD SP ;P(X)+0 IF X<=1., P(X)-PI/2 IF X>1. TST 4(SP) ;CHECK SIGN FLAG BEQ 9$ ADD #100000,(SP) ;NEGATE RESULT FOR (-1,0) AND (1,INF) 9$: MOV (SP)+,12(SP) ;POP RESULT MOV (SP)+,12(SP) ;; TST (SP)+ ;REMOVE SIGN MOV (SP)+,R3 ;RESTORE R3 MOV (SP)+,R4 ;RESTORE R4 RTS PC ;RETURN .WORD 037305,035302 ;.0963034789 .WORD 137421,056514 ;-.1419574624 .WORD 037514,143333 ;.1999773201 .WORD 137652,125244 ;-.3333331319 CONSTS: .WORD 040200,000000 ;.999999999999 .END