/ /EXPCC /COMPLEX RAISED TO COMPLEX / / VERSION 5A 4-26-77 MH / /(A+I*B)^(C+I*D) /A+B=0 YIELDS 0 /B+D=0 MEANS USE EXP3 TO CALCULATTE A^C /A+B=0,C+D=0 YIELDS 1.0 /ENTER + EXIT IN STARTE SECT #EXPCC DPCHK EXTERN #CAC EXTERN EXP EXTERN COS EXTERN SIN EXTERN ALOG EXTERN EXP3 EXTERN ATAN2 EXTERN SQRT BASE 0 EXPCC, JA . FSTA C,0 FLDA 0 FSTA A,0 STARTF BASE .+2000 XTA 0 FSTA T1 /SAVE XR 0 FLDA A JNE EX1 /A NOT 0 FLDA B JNE EX1 STARTE /A=B=0 FCLA EX, FSTA #CAC /RESULT = 0 JA EXPCC EX1, FLDA C /C+D=0? JNE EX2 FLDA D JNE EX2 STARTE FLDA FP1 /RESULT = 1 IF C=D=0 JA EX EX2, FLDA B JNE EX3 /USE EXP3 IF B=D=0 FLDA D JNE EX3 STARTF JSR EXP3 JA .+6 JA A JA C FSTA A STARTE FLDA A /RETURN AS REAL PART JA EX EX3, STARTF /TH=ATAN(B/A) JSR ATAN2 JA .+6 JA B JA A FSTA TH / /LOGR=ALOG(SQRT(A*A+B*B)) FLDA A FMUL A FSTA LOGR FLDA B FMUL B FADDM LOGR JSR SQRT JA .+4 JA LOGR FSTA LOGR JSR ALOG JA .+4 JA LOGR FSTA LOGR /ARG=C*TH+D*LOGR FLDA C FMUL TH FSTA ARG FLDA D FMUL LOGR FADDM ARG / /CALCULATE IN AND COS OF ARG. SAVE SIGN OF EACH JSR SIN JA .+4 JA ARG FSTA SINE JSR COS JA .+4 JA ARG FSTA CSINE /CALL C*LOGR-D*TH FLDA D FMUL TH FSTA REST FLDA C FMUL LOGR FSUB REST FSTA REST /REAL = EXP(REST+ALOG(CSINE)) FLDA CSINE /REAL JLT .+6 LDX 0,1 /=1 IF POSITIVE JA .+3 FNEG JSA DO JXN .+3,0 /SKIP IF POS FNEG FSTA A FLDA SINE /IMAG JLT .+6 LDX 0,1 JA .+5 LDX 0,0 FNEG JSA DO JXN .+3,0 FNEG /RESTORE SIGN FSTA B FLDA T1 /RESTORE XR0 ATX 0 STARTE FLDA A FSTA #CAC JA EXPCC / DO, JA . FSTA TH JSR ALOG JA .+4 JA TH FADD REST FSTA ARG JSR EXP JA .+4 JA ARG FSTA ARG FLDA TH /CHECK SIGN JGE DOX FLDA ARG FNEG FSTA ARG DOX, FLDA ARG JA DO A, F 0.0 B, F 0.0 C, F 0.0 D, F 0.0 LOGR, F 0.0 TH, F 0.0 ARG, F 0.0 SINE, F 0.0 CSINE, F 0.0 REST, F 0.0 FP1, F 1.0 F 0.0 T1, F 0.0