	.TITLE	.ATAN
/
/ INTERNAL GLOBALS
	.GLOBL	ATAN,.ATAN,.CS1
/
/ EXTERNAL GLOBALS
	.GLOBL	.SIGNA,.EXPA,.MOSTA,.MODEB,.SIGNB,.EXPB
	.GLOBL	.SPRST,.SPRLD,.SPRML,.SPRDV,.SPSER,.SPRLD,.CMPLA,.CMPLB
	.GLOBL	.SPADD,.LDREL,.RVRSG
	.GLOBL	.SNGL,.GRAB
	.GLOBL	.ADDR1,.ADDR2
	.GLOBL	.DC0
/
/ INTERNAL LOCATIONS
/
/
/ SINGLE PRECISION INVERSE TANGENT ROUTINES
/ CALCULATES ATAN X, GIVEN X IN ACC A UPON ENTRY
/ EXITS WITH ATAN X IN ACC A
/
ATAN	XX
	JMS*	.GRAB
	JMS	.ATAN
	JMP*	ATAN
/
.ATAN	XX
	JMS*	.SNGL	/CHECK MODE
	LAC*	.MOSTA
	SNA
	JMP*	.ATAN	/ATAN 0=0
        LAC*     .SIGNA
        DAC     SIGN    /SAVE SIGN OF X
        DZM*    .SIGNA
        LAC     .ADDR1
        JMS*    .SPRST  /STORE ^X^ IN ADDR1
        LAC*    .EXPA
        SPA!SNA!CLA
        CMA
        DAC     LARGE   /LARGE=0 IF ^X^.GE.1
        LAC     (RT2M1
        JMS*    .SPRLD  /SQRT(2)-1 IN ACC B
        JMS*    .SPRML  /MULTIPLY
        LAC     LARGE
        SNA
        JMS*    .CMPLA  /COMPLEMENT ACC A IF LARGE IS ZERO
	LAC	.DC0
	JMS*	.SPRLD	/LOAD 1.0
        JMS*    .SPADD	/ADD 1
        LAC     .ADDR2
        JMS*    .SPRST  /AND STORE IN ADDR2
        LAC     .ADDR1
        JMS*    .SPRLD
        JMS*    .LDREL  /^X^ IN ACC A
        LAC     (RT2M1
        JMS*    .SPRLD  /SQRT(2)-1 IN ACC B
        LAC     LARGE
        SZA
        JMS*    .CMPLB  /COMPLEMENT ACC B IF LARGE IS NON-ZERO
        JMS*    .SPADD	/ADD
        LAC     .ADDR2
        JMS*    .SPRLD  /LOAD OTHER HALF OF FRACTION
        LAC     (200000
        DAC*    .MODEB   /SET MODEB BEFORE CALLING REVRSG
        LAC     LARGE
        SNA
        JMS*    .RVRSG  /SWAP ACC'S IF LARGE IS ZERO
        JMS*    .SPRDV  /AND DIVIDE
        LAC     (CA13   /SET UP FOR POWER SERIES CALCULATION
        JMS*    .SPSER
        LAC     .CS1
        JMS*    .SPRLD  /PI/8 IN ACC B
	LAW	-2
	DAC*	.EXPB
	LAC	SIGN
	DAC*	.SIGNB
	XOR*	.SIGNA
	DAC*	.SIGNA
        LAC     LARGE
        SNA
        JMS*    .CMPLA  /COMPLEMENT ACC A IF LARGE IS ZERO
        JMS*    .SPADD
        LAC     LARGE
        SZA
        JMP*    .ATAN	/EXIT IF LARGE IS NON ZERO
        LAC     .CS1
        JMS*    .SPRLD
        DZM*    .EXPB    /PI/4 IN ACC B
	LAC	SIGN
	DAC*	.SIGNB
        JMS*    .SPADD
        JMP*    .ATAN	/EXIT POINT WHEN LARGE IS ZERO
/
SIGN;LARGE
RT2M1	777776; 520236; 146376
CA13	777773; 351050; 326452
	777774; 255347; 312336
	777774; 606700; 231360
	777775; 110711; 563036
	777775; 463140; 745752
	777776; 252525; 514243
	0; 777776; 777766
/
	.END
