ASMB,R,L,C * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAME: PART OF MATH LIBRARY * SOURCE: 24998-18XXX SEE NAM FOR LAST THREE DIGITS * RELOC: PART OF 24998-12001 * PGMR: BG & JTS * HED "DATAN" DOUBLE PRECISION ARCTANGENT OF X. NAM DATAN,6 24998-1X140 REV.2001 750701 ENT DATAN EXT .ZRNT,.ENTP EXT .XADD,.XSUB,.XMPY,.XDIV EXT .DFER,..DCM,.FLUN SPC 2 * * CALLING SEQUENCE : Y = ARCTAN(X) * JSB DATAN * DEF *+3 * DEF Y (RESULT) * DEF X SPC 2 TDB NOP DEC 24 NOP T REP 3 STORAGE NOP P1 REP 3 NOP V REP 3 FOR NOP Q1 REP 3 NOP U REP 3 NOP Y1 NOP ADDRESS OF TAN(3*PI/16),T(PI/16) ALPHA NOP ADDRESS OF 3*PI/16 OR PI/16 FLAG NOP =-1,+1 IF X NEG. OR POS. SIGN NOP =-1,+1 IF /X/ > 1 OR <1 Y NOP X NOP DATAN NOP JSB .ZRNT DEF LIBX JSB .ENTP TRANSFER PARAMETERS DEF Y STA TDB+2 JSB .DFER TRANSFER PRAM X TO T DEF T DEF X,I LDA T SZA X = 0 ? JMP CONTU JSB .DFER SET Y = 0 DEF Y,I DEF T JMP LIBX CONTU CLB,INB IF X > 0, SIGN = +1 SSA CCB ELSE SIGN = -1 STB SIGN SSB,RSS IF T < 0, JMP *+3 JSB ..DCM T = -T DEF T LDB T+2 JSB .FLUN IF T >= 1, THEN CMA,INA -EXPON(T) < 0 CLB,INB IF T < 1 , FLAG = +1, SSA ELSE CCB FLAG = -1 STB FLAG SSB,RSS JMP *+5 JSB .XDIV IF T >= 1, DEF T DEF ONE DEF T JSB .XSUB U = (SQRT(2) - 1) - T DEF U DEF SQ2M1 DEF T LDB U LDA ADCN2 IF T <= SQRT(2) - 1 - T, * Y1 = TAN(PI/16) AND * ALPHA = PI/16 SSB LDA ADCN1 IF T > SQRT(2) - 1 - T, * Y1 = TAN(3*PI/16) AND * ALPHA = 3*PI/16 STA Y1 ADA THREE STA ALPHA JSB .XMPY U = T * Y1 DEF U DEF T DEF Y1,I NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD U = 1 + T * Y1 DEF U DEF U DEF ONE NOP GIVE THE INTERRUPTS A CHANCE JSB .XSUB T = T - Y1 DEF T DEF T DEF Y1,I JSB .XDIV T = (T - Y1) / (1 + T * Y1) DEF T DEF T DEF U JSB .XMPY U = T * T = T ** 2 DEF U DEF T DEF T NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD V = U + B3 DEF V DEF U DEF B3 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY P1 = C2 * (U + B3) DEF P1 DEF C2 DEF V NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD Q1 = U + B2 DEF Q1 DEF U DEF B2 JSB .XMPY Q1 = (U + B2) * (U + B3) DEF Q1 DEF Q1 DEF V NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD Q1 = (U + B2) * (U + B3) + C3 DEF Q1 DEF Q1 DEF C3 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY V = C1 * Q1 DEF V DEF C1 DEF Q1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD U = U + B1 DEF U DEF U DEF B1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY U = (U + B1) * Q1 DEF U DEF U DEF Q1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD U = (U + B1) * Q1 + P1 DEF U DEF U DEF P1 JSB .XDIV U = V / U DEF U DEF V DEF U JSB .XADD U = C0 + V / U DEF U DEF U DEF C0 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY U = U * T DEF U DEF U DEF T NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD Y = U + ALPHA DEF Y,I DEF U DEF ALPHA,I ISZ FLAG IF FLAG = -1, X WAS INVERTED, JMP *+5 JSB .XSUB SO Y = PI/2 - Y DEF Y,I DEF PI2 DEF Y,I ISZ SIGN IF SIGN = -1, X WAS < 0, JMP *+3 JSB ..DCM SO Y = -Y DEF Y,I LIBX JMP TDB+2,I DEF TDB DEC 0 SPC 2 ONE OCT 040000,0,2 1. THREE DEC 3 SQ2M1 OCT 065011,163147,172377 SQRT(2) - 1. PI2 OCT 062207,166521,010402 PI/2 CN1 OCT 052606,160252,160000 TAN(3*PI/16) OCT 045545,170774,146400 3*PI/16 CN2 OCT 062727,153601,052775 TAN(PI/16) OCT 062207,166521,010775 PI/16 ADCN1 DEF CN1 ADCN2 DEF CN2 C0 OCT 065377,057600,170775 .208979591837 C1 OCT 057417,040551,017004 2.97061224490 C2 OCT 112312,135516,167004 -3.35025248131 C3 OCT 137030,044035,144775 -.128720995297 B1 OCT 050645,157155,170406 5.10299532839 B2 OCT 051261,113644,177004 2.58417875505 B3 OCT 052005,053376,037402 1.31282591656 END *