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" - SINGLE PRECISION SQUARE ROOT. NAM SQRT,6 24998-1X181 REV.2001 780424 * ENT SQRT EXT .ZPRV,.FLUN,.PWR2 * A EQU 0 B EQU 1 * * SQRT TAKES THE SINGLE-PRECISION SQUARE ROOT OF A SINGLE-PRECISION * ARGUMENT. * * CALLING SEQUENCE: * DLD * JSB SQRT * (A,B) = ASCII "03UN" * (A,B) = RESULT * * THE ERROR RETURN IS TAKEN IF THE ARGUMENT IS NEGATIVE. * * METHOD: THE RANGE IS REDUCED TO [0.5,2) USING THE IDENTITY: * * SQRT(X) = (2**N) * SQRT(X/2**N) * * IN THIS RANGE, THE INITIAL APPROXIMATION X0 = A*X+B IS USED, * WHERE: * X0 = .59016 * Y + .41778 IN [0.5,1) * AND X0 = .41778 * Y + .59016 IN [1,2) * * GIVING AT LEAST 7 BITS ACCURACY. HERON'S RULE IS APPLIED TWICE, * GIVING 2*X1 = (X1+Y/X1) AND 4*X2 = (2*X1)+(4*Y)/(2*X1) . THE * RESULT IS THEN X2 * 2**(N-2), USING .PWR2 . SKP * CHECK X <= 0, FORM X0 = INITIAL APPROXIMATION * SQRT NOP JSB .ZPRV FOR SHARING. DEF LIBX SSA < 0 ? JMP ERROR YES, ERROR ISZ SQRT NO, GOOD RETURN SZA,RSS = 0 ? JMP LIBX YES, RESULT = 0 STA Y SCALE: FIRST WORD IS SAME JSB .FLUN FORCE TO [0.5,1) ADA =D-4 2*N-4 SLA,ERA N-2: AT END, MULT. BY 2**(N-2) = (2**N)/4 ADB =D2 IF REMAINDER ODD, FORCE TO [1,2) RAL,ARS RESTORE SIGN BIT STA N STB Y+1 LDA Y SEZ IN [.5,1) ? JMP SQRT1 NO FMP A1B2 IN [0.5,1): X0 = A1*Y+B1 FAD A2B1 JMP SQRT2 SQRT1 FMP A2B1 IN [1,2): X0 = A2*Y+B2 FAD A1B2 SQRT2 STA X SAVE X0 STB X+1 * * TWO HERON'S STEPS * LDA Y LDB Y+1 FDV X Y/X0 FAD X 2*X1 = X0+Y/X0 STA X STB X+1 LDA Y LDB Y+1 ADB =D4 4*Y FDV X (4*Y)/(2*X1) = 2*(Y/X1) FAD X 4*X2 = 2*X1 + 2*(Y/X1) JSB .PWR2 MULTIPLY BY (2**N)/4 DEF N LIBX JMP SQRT,I EXIT DEF SQRT SKP * ERROR PROCESSING * ERROR LDA =A03 RETURN ASCII "03UN" LDB =AUN JMP LIBX * * LOCALS & CONSTANTS. * Y BSS 2 SCALED ARG X BSS 2 CURRENT APPROXIMATION N BSS 2 (SCALE FACTOR) - 2 A1B2 OCT 045612 FIRST WORD 0.59016 A2B1 OCT 065400 SECOND WORD 0.59016, FIRST WORD 0.41778 OCT 000377 SECOND WORD 0.41778 END