| 1 | / |
| 2 | /EXPCC |
| 3 | /COMPLEX RAISED TO COMPLEX |
| 4 | / |
| 5 | / VERSION 5A 4-26-77 MH |
| 6 | / |
| 7 | /(A+I*B)^(C+I*D) |
| 8 | /A+B=0 YIELDS 0 |
| 9 | /B+D=0 MEANS USE EXP3 TO CALCULATTE A^C |
| 10 | /A+B=0,C+D=0 YIELDS 1.0 |
| 11 | /ENTER + EXIT IN STARTE |
| 12 | SECT #EXPCC |
| 13 | DPCHK |
| 14 | EXTERN #CAC |
| 15 | EXTERN EXP |
| 16 | EXTERN COS |
| 17 | EXTERN SIN |
| 18 | EXTERN ALOG |
| 19 | EXTERN EXP3 |
| 20 | EXTERN ATAN2 |
| 21 | EXTERN SQRT |
| 22 | BASE 0 |
| 23 | EXPCC, JA . |
| 24 | FSTA C,0 |
| 25 | FLDA 0 |
| 26 | FSTA A,0 |
| 27 | STARTF |
| 28 | BASE .+2000 |
| 29 | XTA 0 |
| 30 | FSTA T1 /SAVE XR 0 |
| 31 | FLDA A |
| 32 | JNE EX1 /A NOT 0 |
| 33 | FLDA B |
| 34 | JNE EX1 |
| 35 | STARTE /A=B=0 |
| 36 | FCLA |
| 37 | EX, FSTA #CAC /RESULT = 0 |
| 38 | JA EXPCC |
| 39 | EX1, FLDA C /C+D=0? |
| 40 | JNE EX2 |
| 41 | FLDA D |
| 42 | JNE EX2 |
| 43 | STARTE |
| 44 | FLDA FP1 /RESULT = 1 IF C=D=0 |
| 45 | JA EX |
| 46 | EX2, FLDA B |
| 47 | JNE EX3 /USE EXP3 IF B=D=0 |
| 48 | FLDA D |
| 49 | JNE EX3 |
| 50 | STARTF |
| 51 | JSR EXP3 |
| 52 | JA .+6 |
| 53 | JA A |
| 54 | JA C |
| 55 | FSTA A |
| 56 | STARTE |
| 57 | FLDA A /RETURN AS REAL PART |
| 58 | JA EX |
| 59 | EX3, STARTF |
| 60 | /TH=ATAN(B/A) |
| 61 | JSR ATAN2 |
| 62 | JA .+6 |
| 63 | JA B |
| 64 | JA A |
| 65 | FSTA TH |
| 66 | / |
| 67 | /LOGR=ALOG(SQRT(A*A+B*B)) |
| 68 | FLDA A |
| 69 | FMUL A |
| 70 | FSTA LOGR |
| 71 | FLDA B |
| 72 | FMUL B |
| 73 | FADDM LOGR |
| 74 | JSR SQRT |
| 75 | JA .+4 |
| 76 | JA LOGR |
| 77 | FSTA LOGR |
| 78 | JSR ALOG |
| 79 | JA .+4 |
| 80 | JA LOGR |
| 81 | FSTA LOGR |
| 82 | /ARG=C*TH+D*LOGR |
| 83 | FLDA C |
| 84 | FMUL TH |
| 85 | FSTA ARG |
| 86 | FLDA D |
| 87 | FMUL LOGR |
| 88 | FADDM ARG |
| 89 | / |
| 90 | /CALCULATE IN AND COS OF ARG. SAVE SIGN OF EACH |
| 91 | JSR SIN |
| 92 | JA .+4 |
| 93 | JA ARG |
| 94 | FSTA SINE |
| 95 | JSR COS |
| 96 | JA .+4 |
| 97 | JA ARG |
| 98 | FSTA CSINE |
| 99 | /CALL C*LOGR-D*TH |
| 100 | FLDA D |
| 101 | FMUL TH |
| 102 | FSTA REST |
| 103 | FLDA C |
| 104 | FMUL LOGR |
| 105 | FSUB REST |
| 106 | FSTA REST |
| 107 | /REAL = EXP(REST+ALOG(CSINE)) |
| 108 | FLDA CSINE /REAL |
| 109 | JLT .+6 |
| 110 | LDX 0,1 /=1 IF POSITIVE |
| 111 | JA .+3 |
| 112 | FNEG |
| 113 | JSA DO |
| 114 | JXN .+3,0 /SKIP IF POS |
| 115 | FNEG |
| 116 | FSTA A |
| 117 | FLDA SINE /IMAG |
| 118 | JLT .+6 |
| 119 | LDX 0,1 |
| 120 | JA .+5 |
| 121 | LDX 0,0 |
| 122 | FNEG |
| 123 | JSA DO |
| 124 | JXN .+3,0 |
| 125 | FNEG /RESTORE SIGN |
| 126 | FSTA B |
| 127 | FLDA T1 /RESTORE XR0 |
| 128 | ATX 0 |
| 129 | STARTE |
| 130 | FLDA A |
| 131 | FSTA #CAC |
| 132 | JA EXPCC |
| 133 | / |
| 134 | DO, JA . |
| 135 | FSTA TH |
| 136 | JSR ALOG |
| 137 | JA .+4 |
| 138 | JA TH |
| 139 | FADD REST |
| 140 | FSTA ARG |
| 141 | JSR EXP |
| 142 | JA .+4 |
| 143 | JA ARG |
| 144 | FSTA ARG |
| 145 | FLDA TH /CHECK SIGN |
| 146 | JGE DOX |
| 147 | FLDA ARG |
| 148 | FNEG |
| 149 | FSTA ARG |
| 150 | DOX, FLDA ARG |
| 151 | JA DO |
| 152 | A, F 0.0 |
| 153 | B, F 0.0 |
| 154 | C, F 0.0 |
| 155 | D, F 0.0 |
| 156 | LOGR, F 0.0 |
| 157 | TH, F 0.0 |
| 158 | ARG, F 0.0 |
| 159 | SINE, F 0.0 |
| 160 | CSINE, F 0.0 |
| 161 | REST, F 0.0 |
| 162 | FP1, F 1.0 |
| 163 | F 0.0 |
| 164 | T1, F 0.0 |
| 165 | \f |