| 1 | / |
| 2 | / |
| 3 | / SUBROUTINE DATAN(X) |
| 4 | / |
| 5 | / VERSION 5A 4-26-77 (MH) |
| 6 | / |
| 7 | /X,THE ARGUMENT, IS REDUCED TO |
| 8 | /0<X<1/2 |
| 9 | /BY THE IDENTITIES: |
| 10 | /ATAN(-X)=-ATAN(X) |
| 11 | /IF X>1.0 THEN ATAN(X)=PI/2 - ATAN(1/X) |
| 12 | /IF .5<X<1.0 THEN ATAN(X)=ATAN(1/2)+ATAN(2*X-(1/(X+2))) |
| 13 | /ATAN(X)=X FOR X<2^(-15) |
| 14 | / |
| 15 | / |
| 16 | / |
| 17 | SECT DATAN |
| 18 | JA #DATAN |
| 19 | DPCHK |
| 20 | / |
| 21 | TEXT +DATAN + |
| 22 | DATNXR, SETX XRDATN |
| 23 | SETB BPDATN |
| 24 | BPDATN, F 0.0 |
| 25 | XRDATN, F 0.0 |
| 26 | DATFP1, F 1.0 |
| 27 | F 0.0 |
| 28 | DATLOW, -15 |
| 29 | 2000 |
| 30 | 0000 |
| 31 | 0000 |
| 32 | 0000 |
| 33 | 0000 |
| 34 | / |
| 35 | ORG 10*3+BPDATN |
| 36 | FNOP |
| 37 | JA DATNXR |
| 38 | 0 |
| 39 | DATRTN, JA . |
| 40 | / |
| 41 | LAMBDA, 0004 |
| 42 | 3057 |
| 43 | 7537 |
| 44 | 4017 |
| 45 | 0276 |
| 46 | 4536 |
| 47 | DATB0, 0005 |
| 48 | 3221 |
| 49 | 3522 |
| 50 | 3121 |
| 51 | 3352 |
| 52 | 5066 |
| 53 | DATA1, 0007 |
| 54 | 5372 |
| 55 | 4104 |
| 56 | 3437 |
| 57 | 1766 |
| 58 | 6167 |
| 59 | DATB1, 0003 |
| 60 | 3135 |
| 61 | 1757 |
| 62 | 0565 |
| 63 | 4141 |
| 64 | 4270 |
| 65 | DATA2, 0001 |
| 66 | 5473 |
| 67 | 7524 |
| 68 | 1112 |
| 69 | 4701 |
| 70 | 2723 |
| 71 | DATB2, 0002 |
| 72 | 2065 |
| 73 | 4070 |
| 74 | 1015 |
| 75 | 2710 |
| 76 | 3176 |
| 77 | DATA3, 7775 |
| 78 | 5374 |
| 79 | 4326 |
| 80 | 3317 |
| 81 | 1675 |
| 82 | 3124 |
| 83 | DATB3, 0001 |
| 84 | 2410 |
| 85 | 5255 |
| 86 | 0370 |
| 87 | 2076 |
| 88 | 6374 |
| 89 | PIS2, 0001 |
| 90 | 3110 |
| 91 | 3755 |
| 92 | 2421 |
| 93 | 0264 |
| 94 | 3013 |
| 95 | ATN1S2, 7777 |
| 96 | 3553 |
| 97 | 0634 |
| 98 | 0530 |
| 99 | 3443 |
| 100 | 6406 |
| 101 | DATP5, 7777 |
| 102 | 3777 |
| 103 | 7777 |
| 104 | 7777 |
| 105 | 7777 |
| 106 | 7776 |
| 107 | X, F 0.0 |
| 108 | F 0.0 |
| 109 | C0, F 0.0 |
| 110 | F 0.0 |
| 111 | DT1, F 0.0 |
| 112 | F 0.0 |
| 113 | DATFP2, F 2.0 |
| 114 | F 0.0 |
| 115 | Z, F 0.0 |
| 116 | F 0.0 |
| 117 | / |
| 118 | /PICK UP RETURN AND ARGUMENT |
| 119 | BASE 0 |
| 120 | #DATAN, STARTD |
| 121 | FLDA 10*3 |
| 122 | FSTA DATRTN |
| 123 | FLDA 0 |
| 124 | SETX XRDATN |
| 125 | SETB BPDATN |
| 126 | BASE BPDATN |
| 127 | LDX 1,1 |
| 128 | FSTA BPDATN |
| 129 | FLDA% BPDATN,1 |
| 130 | FSTA BPDATN |
| 131 | STARTE |
| 132 | FLDA% BPDATN /GET X |
| 133 | LDX -1,0 /SIGN |
| 134 | JGE .+5 |
| 135 | LDX 0,0 /SAVE SIGN |
| 136 | FNEG |
| 137 | FSTA X /SAVE ARG |
| 138 | / |
| 139 | /CHECK ARGAINST LOWER LIMIT |
| 140 | FLDA X |
| 141 | FSUB DATLOW /TOO SMALL? |
| 142 | JLE DATGO /YES ATAN(X)=X |
| 143 | LDX -1,1 |
| 144 | FCLA |
| 145 | FSTA C0 |
| 146 | / |
| 147 | /REDUCE X TO RANGE 0<X<.5 |
| 148 | DATA, FLDA X |
| 149 | FSUB DATFP1 |
| 150 | JLE DATB />1? |
| 151 | FLDA DATFP1 /YES |
| 152 | FDIV X /X=1/X |
| 153 | LDX 0,1 /SET FLAG |
| 154 | FSTA X |
| 155 | DATB, FLDA X |
| 156 | FSUB DATP5 />= .5 |
| 157 | JLT DATC |
| 158 | FLDA X /X=(2X-1)/(X+2) |
| 159 | FADD DATFP2 |
| 160 | FSTA DT1 /TEMP |
| 161 | FLDA X |
| 162 | FMUL DATFP2 |
| 163 | FSUB DATFP1 |
| 164 | FDIV DT1 |
| 165 | FSTA X |
| 166 | FLDA ATN1S2 /C0=ATAN(1/2) |
| 167 | FSTA C0 |
| 168 | /COMPUTE ATAN USING ALGORITHM |
| 169 | DATC, FLDA X |
| 170 | FMUL X |
| 171 | FSTA Z /Z=X*X |
| 172 | FLDA Z |
| 173 | FADD DATB3 /Z+B3 |
| 174 | FSTA DT1 |
| 175 | FLDA DATA3 |
| 176 | FDIV DT1 /A3/(Z+B3) |
| 177 | FADD DATB2 |
| 178 | FADD Z /ADD Z+B2 |
| 179 | FSTA DT1 /TEMP |
| 180 | FLDA DATA2 /A2/TEMP |
| 181 | FDIV DT1 |
| 182 | FADD DATB1 |
| 183 | FADD Z /ADD Z +B1 |
| 184 | FSTA DT1 /TEMP |
| 185 | FLDA DATA1 /A1/TEMP |
| 186 | FDIV DT1 |
| 187 | FADD DATB0 /ADD Z+B0 |
| 188 | FADD Z |
| 189 | FSTA DT1 |
| 190 | FLDA LAMBDA /LAMBDA*X |
| 191 | FMUL X |
| 192 | FDIV DT1 /DIV BY THE REST |
| 193 | FADD C0 |
| 194 | FSTA X |
| 195 | JXN DATD,1 /WAS X>1 ORIGINALLY? |
| 196 | FLDA PIS2 /Y ATAN(X)=PI/2-ATAN(X) |
| 197 | FSUB X |
| 198 | DATD, JXN DATRTN,0 /WAS X<0? |
| 199 | FNEG /Y |
| 200 | JA DATRTN |
| 201 | DATGO, FLDA X |
| 202 | JA DATD |
| 203 | \f |