ASMB,L,R,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 ".SQRT" - TRIPLE PRECISION SQUARE ROOT. NAM .SQRT,7 24998-1X128 REV.2001 780424 * ENT .SQRT EXT .ENTR,.CFER,.PWR2,SQRT,.XADD,.XDIV,.TADD,.TDIV * * .SQRT TAKES THE TRIPLE-PRECISION SQUARE ROOT OF A * TRIPLE-PRECISION ARGUMENT. * * CALLING SEQUENCE: * * JSB .SQRT * DEF *+3 * DEF * DEF * (A,B) = ASCII "02UN" * * * THE ERROR RETURN IS TAKEN IF THE ARGUMENT IS NEGATIVE. * * METHOD: "SQRT" IS CALLED TO GIVE A 2-WORD APPROXIMATION. SINCE * ONLY 15 BITS OF THE ARGUMENT TO SQRT ARE VALID (FIRST WORD), ONLY * 15 BITS OF THIS INITIAL APPROXIMATION ARE VALID. HERON'S RULE IS * APPLIED TWICE IN THE FORM: X(N+1)=0.5*(X(N)+Y/X(N)) GIVING 31 * BITS AND (IF SUFFICIENT PRECISION WAS USED) 63 BITS. SPC 4 * TEST Y=0, COPY Y, TAKE 15-BIT APPROX, CHECK Y<0 . * RESLT DEF *-* ARG DEF *-* .SQRT NOP JSB .ENTR COPY ADDRESSES DEF RESLT JSB .CFER COPY ARG DEF Y DEF ARG,I LDA Y TAKE 15-BIT APPROX. = X0 SZA,RSS ZERO ? JMP ZERO YES. LDB Y+3 JSB SQRT JMP .SQRT,I Y<0, ERROR. SKP * TWO HERON'S RULES: FIRST IN 3-WORD, SECOND IN 4-WORD. * STA X EXTEND TO 3-WORD. STA X+1 FOR CONSISTENT RESULTS, NOT ACCURACY. STB X+2 LDA Y+2 REDUCE Y TO 3-WORD (TEMPORARILY) STA TEMP LDA Y+3 STA Y+2 JSB .XDIV Y/X0 DEF YDIVX DEF Y DEF X JSB .XADD 2*X1 = X0+Y/X0 DEF X DEF X DEF YDIVX LDA X+2 EXTEND TO 4-WORD STA X+3 LDA TEMP RESTORE Y TO 4-WORD STA Y+2 JSB .TDIV Y/(2*X1) = 0.5*(Y/X1) DEF Y DEF Y DEF X CCA (FOR .PWR2) LDB X+3 0.25*(2*X1) = 0.5*(X1) JSB .PWR2 DEF MTWO STB X+3 JSB .TADD X2 = 0.5*(X1)+0.5*(Y/X1) = 0.5*(X1+Y/X1) DEF RESLT,I DEF X DEF Y SQRT1 ISZ .SQRT NORMAL RETURN JMP .SQRT,I * * ARG = 0, RESULT = 0 * ZERO JSB .CFER JUST COPY ARG. DEF RESLT,I DEF ARG,I JMP SQRT1 * * LOCALS & CONSTANTS. * Y BSS 4 ARGUMENT X BSS 4 CURRENT APPROXIMATION YDIVX BSS 3 Y/X0, 3-WORD TEMP BSS 1 SCRATCH FOR SAVING Y+2 MTWO DEC -2 SINCE "DEF" DOESN'T ALLOW LITERALS. END