.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