.TITLE .DPATN / / DOUBLE PRECISION ARCTANGENT ROUTINES / .GLOBL DATAN,DATAN2,.DATAN .GLOBL .DPRML,.DPRDV,.DPADD,.LODBD,.LDDBL,.DPRST,.DPRLD,.DPSER .GLOBL .CMPLA,.CMPLB,.LOAD1,.FETCH,.PSHBA,.DBLE,.ERROR .GLOBL .MODEA,.SIGNA,.EXPA,.MOSTA,.SIGNB,.EXPB,.MOSTB,.B3,.B4 .GLOBL .ADDR1,.ADDR2,.CNTR,.ILMDE,.PICK1,.PICK2,.FLOTB .GLOBL .GRAB / DATAN XX JMS* .GRAB JMS .DATAN JMP* DATAN / .DATAN XX JMS* .DBLE /CHECK MODE LAC* .SIGNA /SAVE SIGN DAC SIGN DZM* .SIGNA LAC* .EXPA SPA!SNA!CLA CMA DAC LARGE /LARGE=0 IF X.GE.1 SZA JMP NODIV /T=X IF X.LT.1.0 JMS* .LODBD /T=1./X IF X.GE.1.0 JMS* .LOAD1 JMS* .DPRDV NODIV LAC .ADDR1 JMS* .DPRST /STORE T LAC (RT2M1 JMS* .DPRLD JMS* .DPRML /T*(2**0.5-1) LAC (C1 JMS* .DPRLD JMS* .DPADD /ADD 1.0 LAC .ADDR1 JMS* .DPRLD /T TO ACC B LAC .ADDR1 JMS* .DPRST /1.0+T*(2.0**0.5-1)=DEN TO ADDR1 JMS* .LDDBL /T TO ACC A LAC (RT2M1 JMS* .DPRLD JMS* .CMPLB JMS* .DPADD /NUM=T-(2**0.5-1) LAC .ADDR1 JMS* .DPRLD /DEN TO ACC B JMS* .DPRDV /Y=NUM/DEN LAC .ADDR1 JMS* .DPRST /SAVE Y JMS* .LODBD /ACC A TO ACC B JMS* .DPRML LAC .ADDR2 JMS* .DPRST /SAVE Y**2 LAW -20 DAC* .CNTR LAC (C33 /SERIES SET UP JMS* .DPSER LAC .ADDR1 JMS* .DPRLD JMS* .DPRML /FINISH SERIES CALCULATION LAC (PI JMS* .DPRLD LAW -2 DAC* .EXPB /ACC B = PI/8 JMS* .DPADD LAC LARGE SZA JMP SIGNIT LAC (PI JMS* .DPRLD LAC C1 DAC* .EXPB /LOAD PI/2 JMS* .CMPLA JMS* .DPADD SIGNIT LAC SIGN /RESTORE SIGN DAC* .SIGNA JMP* .DATAN / DATAN2 XX JMS* .FETCH JMS* .PSHBA /FIRST ARGUMENT TO ACC A LAC* .MODEA JMS* .DBLE /CHECK FIRST ARGUMENT MODE JMS* .FETCH /SECOND ARGUMENT TO ACC B TAD (-2 SPA JMP BINT /SECOND ARGUMENT IS AN INTEGER SNA JMP BSP /SECOND ARGUMENT SINGLE PRECISION TAD (-2 SMA JMP* .ILMDE /SECOND ARGUMENT COMPLEX,LOGICAL OR CHARACTER BDP LAC* .SIGNA DAC SINA LAC* .SIGNB DAC SINB LAC* .MOSTB SZA JMP BNOTZ SAD* .MOSTA JMP ATANER /ERROR: BOTH ARGUMENTS ZERO LAC (PI /ONLY SECOND ARGUMENT ZERO JMS* .DPRLD /EXIT WITH + OR - PI JMS* .LDDBL LAC SINA DAC* .SIGNA JMP* DATAN2 BNOTZ JMS* .DPRDV LAC* .MODEA JMS .DATAN /CALCULATE ARCTAN LAC SINB SNA JMP* DATAN2 /EXIT IF QUAD. 1 OR 4 LAC (PI JMS* .DPRLD /LOAD PI LAC SINA DAC* .SIGNB /SET UP SIGN JMS* .DPADD /ADD OR SUBTRACT PI JMP* DATAN2 / BINT SAD (-1 JMP BDINT /DOUBLE INTEGER JMS* .PICK1 /PICK UP SINGLE INTEGER FLTB JMS* .FLOTB /AND FLOAT IT SAD (300000 JMP BDP BSP DZM* .B3 /SINGLE PRECISION, ZERO EXTENSION DZM* .B4 JMP BDP BDINT JMS* .PICK2 /PICK UP DOUBLE INTEGER JMP FLTB /AND GO FLOAT IT / ATANER LAW -31 JMS* .ERROR JMP* DATAN2 / PI 2; 444176; 325042; 055060; 432305 RT2M1 777776; 520236; 146376; 357144; 410546 C33 777771; 014044; 754514; 436750; 212654 777772; 241235; 211416; 140007; 701447 777772; 737130; 243533; 565206; 454627 777773; 114705; 035625; 665743; 566260 777773; 213746; 611163; 120757; 526535 777773; 307671; 710460; 471374; 247621 777773; 414106; 315150; 417706; 314752 777773; 536237; 600764; 214451; 442170 777773; 703606; 545107; 110475; 771045 777774; 042105; 103363; 321371; 011044 777774; 166116; 304712; 747506; 224233 777774; 350565; 135056; 157245; 202560 777774; 616160; 707070; 704272; 007476 777775; 111111; 444444; 444435; 170223 777775; 463146; 146314; 631463; 117770 777776; 252525; 525252; 525252; 525233 C1 1; 0; 0; 0; 0 SINA;SINB;LARGE;SIGN / .END