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-18120 * RELOC: PART OF 24998-12001 * PGMR: BG & JTS * HED ".CDIV" COMPLEX DIVISION NAM .CDIV,6 24998-1X120 REV.2013 791227 * ENT .CDIV EXT .ZRNT,.ENTC,.FLUN,..FCM * * .CDIV - COMPLEX DIVIDE. * * CALLING SEQUENCE: Y = X1 / X2 * * JSB .CDIV * DEF Y * DEF X1 * DEF X2 * * METHOD: THE MOST OFTEN QUOTED FORM OF COMPLEX DIVIDE IS: * * (A,B) (A*C+B*D,B*C-A*D) * ----- = ----------------- * (C,D) C*C+D*D * * WHICH FAILS FOR LARGE VALUES OF C OR D, EVEN THOUGH THE RESULT * MAY BE EASILY REPRESENTABLE. A MODIFICATION IS USED WHICH AVOIDS * THIS PROBLEM: * * (A,B) (A+B*D/C,B-A*D/C) * ----- = ----------------- IF ABS(C) > ABS(D) * (C,D) C+D*D/C * AND * * (A,B) (B+A*C/D,-A+B*C/D) * ----- ----------------- IF ABS(C) < ABS(D) * (C,D) D+C*C/D * * NOTE THAT THE SECOND FORM IS IDENTICAL TO THE FIRST EXCEPT THAT: * * 1) "A" HAS BEEN SWITCHED WITH "B", AND "C" WITH "D". * 2) THE SIGN OF THE IMAGINARY PART HAS CHANGED. * * THE SECOND FORM IS COMPUTED BY PERFORMING THESE TWO OPERATIONS. SKP * INITIALIZATION. GET ADDRESSES OF A,B,C,D & RESULT. * TDB NOP ABS .CDIV-TDB NOP T1 BSS 2 T2 BSS 2 T3 BSS 2 IY NOP B NOP D NOP Y NOP A NOP C NOP .CDIV NOP JSB .ZRNT DEF LIBX JSB .ENTC GET PRAMS ADDRESS DEF Y STA TDB+2 LDA Y COMPUTE ADDRESSES OF IMAG PARTS. ADA =D2 STA IY LDA A ADA =D2 STA B LDA C ADA =D2 STA D * * DECIDE WHICH PART OF DENOMINATOR IS BIGGER. * DLD C,I T1 = - EXPONENT OF C. CCE,SZA,RSS C=0 ? (E=1) ERA,SLA,ARS IF SO, SET EXP TO -16384. JSB .FLUN CMA,INA STA T1 DLD D,I GET EXP OF D. CCE,SZA,RSS D=0 ? (E=1) ERA,SLA,ARS IF SO, SET EXP TO -16384. JSB .FLUN ADA T1 EXP(D) - EXP(C) RAL,SLA,ERA ABS(C) > ABS(D) ? (E=1 IF SO) JMP CDIV1 YES. USE D/C. LDA A NO. D>C. SWAP (USE OF) A & B, C & D. LDB B STA B STB A LDA C LDB D STA D STB C SKP * PERFORM THE DIVIDE. * CDIV1 DLD D,I T1 = D / C FDV C,I STA T1 STB T1+1 FMP D,I T2 = C+D*D/C FAD C,I STA T2 STB T2+1 DLD B,I REAL PART = (A+B*D/C) / T2 FMP T1 FAD A,I FDV T2 DST T3 DLD A,I IMAG PART = +-(B-A*D/C) / T2 FMP T1 FSB B,I SEZ C>D ? JSB ..FCM YES, IS (B-A*D/C). FDV T2 DST IY,I DLD T3 DST Y,I LIBX JMP TDB+2,I DEF TDB DEC 0 END