ASSEMBLY LISTING OF SEGMENT >spec>install>1110>arc_tangent_.alm ASSEMBLED ON: 11/11/89 0947.0 mst Sat OPTIONS USED: -target l68 list symbols ASSEMBLED BY: ALM Version 8.14 March 1989 ASSEMBLER CREATED: 06/09/89 1002.3 mst Fri 1 " ****************************************** 2 " * * 3 " * Copyright, (C) Honeywell Limited, 1985 * 4 " * * 5 " ****************************************** 6 7 " HISTORY COMMENTS: 8 " 1) change(86-07-14,BWong), approve(86-07-14,MCR7413), 9 " audit(86-07-16,Ginter), install(86-07-28,MR12.0-1104): 10 " Make code more efficient. 11 " END HISTORY COMMENTS 12 13 000000 14 name arc_tangent_ 15 " Modification history: 16 " Written by H. Hoover, M. Mabey, and B. Wong, April 1985, 17 " based on the GCOS routine '7naj'. 18 " 19 " Function: Approximate to single precision the principal value, in radians 20 " or degrees, of the arctangent of (x, y) or z where z=x/y for any 21 " valid input argument(s). For atan(z) the answer is in quadrant 1 22 " or 4 (-pi/2<=atan<=pi/2, -90<=atan<=90). For atan(x,y) the answer 23 " will be in the correct quadrant (-pi<=atan2<=pi, -180<=atan2<=180). 24 " 25 " Modified: March 18, 1986 by B. Wong - Make code more efficient by 26 " replacing 27 " 28 " range_0_to_1: fcmg tan_pi_by_32,x2 29 " tmi range_0 30 " range_1: tra calculate_for_range_1_to_7 31 " range_0: 32 " 33 " with 34 " 35 " range_0_to_1: fcmg tan_pi_by_32,x2 36 " range_1: tpl calculate_for_range_1_to_7 37 " range_0: 38 " 39 " Entry: through the appropriately named entry point with: 40 " EAQ = the first argument (z or x). 41 " PR1 = the address of the second argument (y). 42 " PR2 = the address of a 8 word, even-word aligned scratch area. 43 " PR3 = the return address. 44 " 45 " Exit: EAQ = the desired arctangent in radians or degrees. 46 " 47 " Uses: X0, X1, X2, X3, X4 48 " X0 = saves a return address from arctan 49 " X1 = saves a return address from arctan2 50 " X2 = indicates BFP or HFP mode - all the floating point math 51 " routines use this register for the same purpose. 52 " X3 = saves a return address from part_arctan 53 " X4 = index to tables 54 55 000000 56 segref math_constants_,half_pi,hfp_one_radian,one_radian,pi 57 000000 58 equ BFP,0 000002 59 equ HFP,2 000000 60 equ z,0 000002 61 equ zz,2 000003 62 equ arctan_z,3 000004 63 equ x,4 000005 64 equ y,5 000006 65 equ indicators,6 66 000022 67 segdef arc_tangent_degrees_,hfp_arc_tangent_degrees_ 000027 68 segdef arc_tangent_degrees_2_,hfp_arc_tangent_degrees_2_ 000034 69 segdef arc_tangent_radians_,hfp_arc_tangent_radians_ 000040 70 segdef arc_tangent_radians_2_,hfp_arc_tangent_radians_2_ 71 72 000000 73 arc_tangent_degrees_: 000000 aa 000000 6220 00 74 eax2 BFP " no offset for BFP constants 000001 0a 000044 7000 00 75 tsx0 arctan " EAQ := arctan (x) 000002 4a 4 00010 4631 20 76 dfmp one_radian " convert radians to degrees 000003 aa 000000 4710 00 77 frd 0 000004 aa 3 00000 7101 00 78 tra pr3|0 " return 79 000005 80 arc_tangent_degrees_2_: 000005 aa 000000 6220 00 81 eax2 BFP " no offset for BFP constants 000006 0a 000154 7010 00 82 tsx1 arctan2 " EAQ := arctan2 (x,y) 000007 4a 4 00010 4631 20 83 dfmp one_radian " convert radians to degrees 000010 aa 000000 4710 00 84 frd 0 000011 aa 3 00000 7101 00 85 tra pr3|0 " return 86 000012 87 arc_tangent_radians_: 000012 aa 000000 6220 00 88 eax2 BFP " no offset for BFP constants 000013 0a 000044 7000 00 89 tsx0 arctan " EAQ := arctan (x) 000014 aa 000000 4710 00 90 frd 0 000015 aa 3 00000 7101 00 91 tra pr3|0 " return 92 000016 93 arc_tangent_radians_2_: 000016 aa 000000 6220 00 94 eax2 BFP " no offset for BFP constants 000017 0a 000154 7010 00 95 tsx1 arctan2 " EAQ := arctan2 (x,y) 000020 aa 000000 4710 00 96 frd 0 000021 aa 3 00000 7101 00 97 tra pr3|0 " return 98 000022 99 hfp_arc_tangent_degrees_: 000022 aa 000002 6220 00 100 eax2 HFP " 2 word offset for HFP constants 000023 0a 000044 7000 00 101 tsx0 arctan " EAQ := arctan (x) 000024 4a 4 00012 4631 20 102 dfmp hfp_one_radian " convert radians to degrees 000025 aa 000000 4710 00 103 frd 0 000026 aa 3 00000 7101 00 104 tra pr3|0 " return 105 000027 106 hfp_arc_tangent_degrees_2_: 000027 aa 000002 6220 00 107 eax2 HFP " 2 word offset for HFP constants 000030 0a 000154 7010 00 108 tsx1 arctan2 " EAQ := arctan2 (x,y) 000031 4a 4 00012 4631 20 109 dfmp hfp_one_radian " convert radians to degrees 000032 aa 000000 4710 00 110 frd 0 000033 aa 3 00000 7101 00 111 tra pr3|0 " return 112 000034 113 hfp_arc_tangent_radians_: 000034 aa 000002 6220 00 114 eax2 HFP " 2 word offset for HFP constants 000035 0a 000044 7000 00 115 tsx0 arctan " EAQ := arctan (x) 000036 aa 000000 4710 00 116 frd 0 000037 aa 3 00000 7101 00 117 tra pr3|0 " return 118 000040 119 hfp_arc_tangent_radians_2_: 000040 aa 000002 6220 00 120 eax2 HFP " 2 word offset for HFP constants 000041 0a 000154 7010 00 121 tsx1 arctan2 " EAQ := arctan2 (x,y) 000042 aa 000000 4710 00 122 frd 0 000043 aa 3 00000 7101 00 123 tra pr3|0 " return 124 000044 125 arctan: 000044 aa 400000 4750 03 126 fad =0.0,du " normalize input 000045 aa 2 00003 4551 00 127 fst pr2|arctan_z " store argument z 128 129 " Find which of the 9 ranges abs(z) lies in using a binary search. 130 131 " Set X4 as the range indicator. X4 is set to X2+4*(range-1) since double 132 " precision tables with decimal BFP and octal HFP values are used. 133 000046 aa 000000 6240 12 134 eax4 0,x2 " initialize the table index with BFP or HFP offset 135 000047 0a 000256 4250 12 136 fcmg tan_7_pi_by_32,x2 000050 0a 000104 6040 00 137 tmi range_0_to_3 138 000051 0a 000272 4250 12 139 fcmg tan_13_pi_by_32,x2 000052 0a 000072 6040 00 140 tmi range_4_to_6 141 000053 0a 000276 4250 12 142 fcmg tan_15_pi_by_32,x2 000054 0a 000070 6040 00 143 tmi range_7 144 000055 145 range_8: 146 " range = 8, abs (z) >= tan_15_pi_by_32 000055 0a 000226 4250 12 147 fcmg eps1,x2 000056 aa 000003 6040 04 148 tmi 3,ic " if abs (z) < 1e71b: 000057 4a 4 00014 4311 20 149 fld half_pi,x2 " EAQ := radians = half_pi 000060 0a 000133 7100 00 150 tra set_to_quadrant_1_or_4 151 " else: 000061 aa 400000 5150 03 152 fcmp =0.0,du 000062 aa 000002 6050 04 153 tpl 2,ic 000063 aa 000000 5130 00 154 fneg 0 " EAQ := abs (z) 000064 aa 001000 5250 03 155 fdi =-1.0,du " EAQ := -1/abs_z 000065 0a 000137 7030 00 156 tsx3 part_arctan " calculate part_arctan (-1/abs_z) 157 " which is equivalent to - (part_arctan (1/abs_z)) 000066 4a 4 00014 4751 20 158 fad half_pi,x2 " EAQ := radians = half_pi - part_arctan (1/abs_z) 000067 0a 000133 7100 00 159 tra set_to_quadrant_1_or_4 160 000070 161 range_7: 000070 aa 000030 0640 03 162 adx4 =24,du " range = 7, tan_13_pi_by_32 <= abs (z) < tan_15_pi_by_32 000071 0a 000123 7100 00 163 tra calculate_for_range_1_to_7 164 000072 165 range_4_to_6: 000072 0a 000266 4250 12 166 fcmg tan_11_pi_by_32,x2 000073 0a 000076 6040 00 167 tmi range_4_to_5 168 000074 169 range_6: 000074 aa 000024 0640 03 170 adx4 =20,du " range = 6, tan_11_pi_by_32 <= abs (z) < tan_13_pi_by_32 000075 0a 000123 7100 00 171 tra calculate_for_range_1_to_7 172 000076 173 range_4_to_5: 000076 0a 000262 4250 12 174 fcmg tan_9_pi_by_32,x2 000077 0a 000102 6040 00 175 tmi range_4 176 000100 177 range_5: 000100 aa 000020 0640 03 178 adx4 =16,du " range = 5, tan_9_pi_by_32 <= abs (z) < tan_11_pi_by_32 000101 0a 000123 7100 00 179 tra calculate_for_range_1_to_7 180 000102 181 range_4: 000102 aa 000014 0640 03 182 adx4 =12,du " range = 4, tan_7_pi_by_32 <= abs (z) < tan_9_pi_by_32 000103 0a 000123 7100 00 183 tra calculate_for_range_1_to_7 184 000104 185 range_0_to_3: 000104 0a 000246 4250 12 186 fcmg tan_3_pi_by_32,x2 000105 0a 000114 6040 00 187 tmi range_0_to_1 188 000106 0a 000252 4250 12 189 fcmg tan_5_pi_by_32,x2 000107 0a 000112 6040 00 190 tmi range_2 191 000110 192 range_3: 000110 aa 000010 0640 03 193 adx4 =8,du " range = 3, tan_5_pi_by_32 <= abs (z) < tan_7_pi_by_32 000111 0a 000123 7100 00 194 tra calculate_for_range_1_to_7 195 000112 196 range_2: 000112 aa 000004 0640 03 197 adx4 =4,du " range = 2, tan_3_pi_by_32 <= abs (z) < tan_5_pi_by_32 000113 0a 000123 7100 00 198 tra calculate_for_range_1_to_7 199 000114 200 range_0_to_1: 000114 0a 000242 4250 12 201 fcmg tan_pi_by_32,x2 202 000115 203 range_1: 204 " range = 1, tan_pi_by_32 <= abs (z) < tan_3_pi_by_32 000115 0a 000123 6050 00 205 tpl calculate_for_range_1_to_7 206 000116 207 range_0: 208 " range = 0, abs (z) < tan_pi_by_32 000116 aa 400000 5150 03 209 fcmp =0.0,du 000117 aa 000002 6050 04 210 tpl 2,ic 000120 aa 000000 5130 00 211 fneg 0 " EAQ := abs (z) 000121 0a 000137 7030 00 212 tsx3 part_arctan " EAQ := part_arctan (abs_z) 000122 0a 000133 7100 00 213 tra set_to_quadrant_1_or_4 214 000123 215 calculate_for_range_1_to_7: 000123 aa 400000 5150 03 216 fcmp =0.0,du 000124 aa 000002 6050 04 217 tpl 2,ic 000125 aa 000000 5130 00 218 fneg 0 " EAQ := abs (z) 000126 0a 000302 4770 14 219 dfad one_over_u,x4 " EAQ := t = 1/u(range) - (1/(u(range)**2)+1) / (1/u(range) + abs_z) 000127 0a 000336 5270 14 220 dfdi one_plus_one_over_u_squared,x4 000130 0a 000302 4770 14 221 dfad one_over_u,x4 000131 0a 000137 7030 00 222 tsx3 part_arctan " EAQ := part_arctan (t) 000132 0a 000372 4770 14 223 dfad arctan_of_u,x4 " EAQ := radians = part_arctan (t) + arctan(u(range)) 224 000133 225 set_to_quadrant_1_or_4: 000133 aa 2 00003 4301 00 226 fszn pr2|arctan_z " set indicators 000134 aa 000000 6050 10 227 tpl 0,x0 " if z >= 0 then return (radians) 000135 aa 000000 5130 00 228 fneg 0 " else return (-radians) 000136 aa 000000 7100 10 229 tra 0,x0 230 000137 231 part_arctan: 232 " EAQ contains z arg 000137 0a 000232 4250 12 233 fcmg eps2,x2 " if abs (z) < 5.7031627e10 000140 aa 000000 6040 13 234 tmi 0,x3 " then return (z) 235 000141 aa 2 00000 4721 00 236 dfstr pr2|z 000142 aa 2 00000 4631 00 237 dfmp pr2|z " calculate zz = z*z 000143 aa 2 00002 4701 00 238 fstr pr2|zz 000144 0a 000442 4610 12 239 fmp p3,x2 " calculate p(zz) 000145 0a 000436 4770 12 240 dfad p2,x2 000146 aa 2 00002 4611 00 241 fmp pr2|zz 000147 0a 000432 4770 12 242 dfad p1,x2 000150 aa 2 00002 4611 00 243 fmp pr2|zz 000151 0a 000426 4770 12 244 dfad p0,x2 000152 aa 2 00000 4611 00 245 fmp pr2|z " calculate z*p(zz) 000153 aa 000000 7100 13 246 tra 0,x3 " return 247 000154 248 arctan2: 000154 aa 400000 4750 03 249 fad =0.0,du " normalize x 000155 aa 2 00004 4551 00 250 fst pr2|x " save normalized x for quadrant check 000156 aa 1 00000 4311 00 251 fld pr1|0 " load y 000157 aa 400000 4750 03 252 fad =0.0,du " normalize y 000160 aa 2 00005 4551 00 253 fst pr2|y " save normalized y for quadrant check 000161 0a 000171 6010 00 254 tnz y_not_zero 000162 aa 2 00004 4301 00 255 fszn pr2|x " test if x = 0 also 000163 0a 000213 6000 00 256 tze arctan2_domain_err " 0/0 is error 000164 4a 4 00014 4331 20 257 dfld half_pi,x2 " atan(x/0) = + or - (half_pi) 000165 aa 2 00004 4301 00 258 fszn pr2|x 000166 aa 000000 6050 11 259 tpl 0,x1 " if x >= 0 then return (radians) 000167 aa 000000 5130 00 260 fneg 0 " else return (-radians) 000170 aa 000000 7100 11 261 tra 0,x1 262 263 000171 264 y_not_zero: 000171 aa 2 00006 7541 00 265 sti pr2|indicators " save indicators 000172 0a 000236 6340 12 266 ldi no_overflow,x2 000173 aa 2 00004 5251 00 267 fdi pr2|x " EAQ := x/y 000174 0a 000222 6140 00 268 teo quotient_too_large " if overflow, atan(x,y) = pi/2 or -pi/2 000175 0a 000217 6150 00 269 teu quotient_too_small " if underflow, atan(x,y) = 0 000176 aa 2 00006 6341 00 270 ldi pr2|indicators " restore previous indicators 000177 aa 400000 4750 03 271 fad =0.0,du " set indicators 000200 aa 000002 6050 04 272 tpl 2,ic " calculate z = abs (x,y) 000201 aa 000000 5130 00 273 fneg 0 000202 0a 000044 7000 00 274 tsx0 arctan " EAQ := arctan(z) 275 000203 276 set_quadrant: 000203 aa 2 00005 4301 00 277 fszn pr2|y " set the quadrant 000204 aa 000003 6050 04 278 tpl 3,ic " if y < 0 then 000205 aa 000000 5130 00 279 fneg 0 " radians = pi-radians 000206 4a 4 00016 4771 20 280 dfad pi,x2 000207 aa 2 00004 4301 00 281 fszn pr2|x 000210 aa 000000 6050 11 282 tpl 0,x1 " if x >= 0 then return (radians) 000211 aa 000000 5130 00 283 fneg 0 " else return (-radians) 000212 aa 000000 7100 11 284 tra 0,x1 285 286 " error when x=0 and y=0 000213 287 arctan2_domain_err: 000213 aa 000013 2360 07 288 ldq 11,dl 000214 4a 4 00020 7001 20 289 tsx0 |[call_math_error_] 000215 aa 400000 4310 03 290 fld =0.0,du 000216 aa 3 00000 7101 00 291 tra pr3|0 " return to caller 292 000217 293 quotient_too_small: 000217 aa 2 00006 6341 00 294 ldi pr2|indicators " restore indicators 000220 aa 400000 4310 03 295 fld =0.0,du " radians = 0.0 000221 0a 000203 7100 00 296 tra set_quadrant 297 000222 298 quotient_too_large: 000222 aa 2 00006 6341 00 299 ldi pr2|indicators " restore indicators 000223 4a 4 00014 4331 20 300 dfld half_pi,x2 " radians = half_pi 000224 0a 000203 7100 00 301 tra set_quadrant 302 000225 aa 000000 0110 03 303 even 304 000226 aa 220400 000000 305 eps1: oct 220400000000,000000000000 " 2**71 = 2.36e21 000227 aa 000000 000000 000230 aa 044400 000000 306 oct 044400000000,000000000000 000231 aa 000000 000000 000232 aa 704471 421604 307 eps2: dec 5.7031627d-10 000233 aa 407031 702277 000234 aa 762116 304341 308 oct 762116304341,000000000000 000235 aa 000000 000000 000236 309 no_overflow: 000236 aa 000000 004000 310 oct 000000004000,000000000000 " bit 25 is the overflow mask 000237 aa 000000 000000 000240 aa 000000 004010 311 oct 000000004010,000000000000 " bit 33 is the hex indicator 000241 aa 000000 000000 312 313 " This is the table of ranges. 314 000242 315 tan_pi_by_32: 000242 aa 772623 327342 316 dec .98491403d-1 " tan(pi/32) 000243 aa 551170 653205 000244 aa 000062 332734 317 oct 000062332734,000000000000 000245 aa 000000 000000 000246 318 tan_3_pi_by_32: 000246 aa 776466 501014 319 dec .30334668d00 " tan(3*pi/32) 000247 aa 276317 550567 000250 aa 000233 240406 320 oct 000233240406,000000000000 000251 aa 000000 000000 000252 321 tan_5_pi_by_32: 000252 aa 000421 526706 322 dec .53451114d00 " tan(5*pi/32) 000253 aa 632271 614050 000254 aa 000421 526707 323 oct 000421526707,000000000000 000255 aa 000000 000000 000256 324 tan_7_pi_by_32: 000256 aa 000644 140012 325 dec .82067879d00 " tan(7*pi/32) 000257 aa 471104 326120 000260 aa 000644 140013 326 oct 000644140013,000000000000 000261 aa 000000 000000 000262 327 tan_9_pi_by_32: 000262 aa 002467 737541 328 dec 1.2185035d00 " tan(9*pi/32) 000263 aa 524374 032261 000264 aa 002046 773754 329 oct 002046773754,000000000000 000265 aa 000000 000000 000266 330 tan_11_pi_by_32: 000266 aa 002736 742355 331 dec 1.8708684d00 " tan(11*pi/32) 000267 aa 010752 710074 000270 aa 002073 674236 332 oct 002073674236,000000000000 000271 aa 000000 000000 000272 333 tan_13_pi_by_32: 000272 aa 004645 753171 334 dec 3.2965582d00 " tan(13*pi/32) 000273 aa 751342 441016 000274 aa 002151 372636 335 oct 002151372636,000000000000 000275 aa 000000 000000 000276 336 tan_15_pi_by_32: 000276 aa 010504 715423 337 dec 10.153170d00 " tan(15*pi/32) 000277 aa 054564 714560 000300 aa 002504 715423 338 oct 002504715423,000000000000 000301 aa 000000 000000 339 340 " This table is the value of 1/u(i), where 1/u(i)=.... 341 000302 342 one_over_u: 000302 aa 006501 577670 343 dec 5.0273394921258481045d0 " 1/tan(pi/16) 000303 aa 441107 342042 000304 aa 002240 677734 344 oct 002240677734,220443561021 000305 aa 220443 561021 000306 aa 004465 011714 345 dec 2.4142135623730950488d0 " 1/tan(2*pi/16) 000307 aa 637635 714441 000310 aa 002115 202363 346 oct 002115202363,147747363110 000311 aa 147747 363110 000312 aa 002577 103070 347 dec 1.4966057626654890176d0 " 1/tan(3*pi/16) 000313 aa 455164 302502 000314 aa 002057 710307 348 oct 002057710307,045516430250 000315 aa 045516 430250 000316 aa 002400 000000 349 dec 1.0d0 " 1/tan(4*pi/16) 000317 aa 000000 000000 000320 aa 002040 000000 350 oct 002040000000,000000000000 000321 aa 000000 000000 000322 aa 000526 067012 351 dec .66817863791929891999d0 " 1/tan(5*pi/16) 000323 aa 533771 440572 000324 aa 000526 067012 352 oct 000526067012,533771440572 000325 aa 533771 440572 000326 aa 776650 117146 353 dec .41421356237309504880d0 " 1/tan(6*pi/16) 000327 aa 376357 144411 000330 aa 000324 047463 354 oct 000324047463,177167462204 000331 aa 177167 462204 000332 aa 774627 276570 355 dec .19891236737965800691d0 " 1/tan(7*pi/16) 000333 aa 052461 260037 000334 aa 000145 657536 356 oct 000145657536,012514254010 000335 aa 012514 254010 357 358 " This table is values of 1/(u(i)**2) + 1. 359 000336 360 one_plus_one_over_u_squared: 000336 aa 013133 472163 361 dec -.26274142369088180356d02 000337 aa 441121 370576 000340 aa 005713 347216 362 oct 005713347216,344112137060 000341 aa 344112 137060 000342 aa 007112 766063 363 dec -.68284271247461900976d01 000343 aa 140142 063337 000344 aa 003445 373031 364 oct 003445373031,460061031557 000345 aa 460061 031557 000346 aa 005141 232450 365 dec -.32398288088435500410d01 000347 aa 425406 626075 000350 aa 003630 246512 366 oct 003630246512,105301545417 000351 aa 105301 545417 000352 aa 003000 000000 367 dec -.20d1 000353 aa 000000 000000 000354 aa 003700 000000 368 oct 003700000000,000000000000 000355 aa 000000 000000 000356 aa 003215 551173 369 dec -.14464626921716895685d01 000357 aa 721720 634627 000360 aa 003721 555117 370 oct 003721555117,372172063463 000361 aa 372172 063463 000362 aa 003324 047463 371 dec -.11715728752538099024d01 000363 aa 177167 462204 000364 aa 003732 404746 372 oct 003732404746,317716746221 000365 aa 317716 746221 000366 aa 003365 675771 373 dec -.10395661298965800348d01 000367 aa 760411 653016 000370 aa 003736 567577 374 oct 003736567577,176041165302 000371 aa 176041 165302 375 376 " This table is values of arctan(u(i)). 377 000372 378 arctan_of_u: 000372 aa 774622 077325 379 dec .19634954084936207740d00 " pi/16 000373 aa 042055 060432 000374 aa 000144 417665 380 oct 000144417665,210413214107 000375 aa 210413 214107 000376 aa 776622 077325 381 dec .39269908169872415481d00 " 2*pi/16 000377 aa 042055 060432 000400 aa 000311 037552 382 oct 000311037552,421026430215 000401 aa 421026 430215 000402 aa 000455 457437 383 dec .58904862254808623221d00 " 3*pi/16 000403 aa 631441 644324 000404 aa 000455 457437 384 oct 000455457437,631441644324 000405 aa 631441 644324 000406 aa 000622 077325 385 dec .78539816339744830962d00 " 4*pi/16 000407 aa 042055 060432 000410 aa 000622 077325 386 oct 000622077325,042055060432 000411 aa 042055 060432 000412 aa 000766 517212 387 dec .98174770424681038702d00 " 5*pi/16 000413 aa 252470 274541 000414 aa 000766 517212 388 oct 000766517212,252470274541 000415 aa 252470 274541 000416 aa 002455 457437 389 dec 1.17809724509617246442d00 " 6*pi/16 000417 aa 631441 644324 000420 aa 002045 545743 390 oct 002045545743,763144164432 000421 aa 763144 164432 000422 aa 002537 667372 391 dec 1.37444678594553454182d00 " 7*pi/16 000423 aa 335647 352367 000424 aa 002053 766737 392 oct 002053766737,233564735237 000425 aa 233564 735237 393 394 " These constants are used to approximate atan over the range [0,tan(pi/32)]. 395 000426 aa 000777 777777 396 p0: dec .9999999999924517d00 000427 aa 777366 325725 000430 aa 000777 777777 397 oct 000777777777,777366325725 000431 aa 777366 325725 000432 aa 777252 525261 398 p1: dec -.33333330840148d00 000433 aa 267741 700306 000434 aa 001525 252530 399 oct 001525252530,533760740143 000435 aa 533760 740143 000436 aa 774631 445545 400 p2: dec .199987124164d00 000437 aa 571746 370206 000440 aa 000146 311331 401 oct 000146311331,336371476042 000441 aa 336371 476042 000442 aa 775337 626574 402 p3: dec -.14072538d00 000443 aa 713546 710626 000444 aa 001667 745537 403 oct 001667745537,162731562146 000445 aa 162731 562146 404 405 end NO LITERALS NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000446 5a 000003 000000 000447 5a 000135 600000 000450 aa 000000 000000 000451 55 000012 000002 000452 5a 000002 400003 000453 55 000006 000012 000454 aa 014 141 162 143 000455 aa 137 164 141 156 000456 aa 147 145 156 164 000457 aa 137 000 000 000 000460 55 000024 000003 000461 0a 000040 400000 000462 55 000015 000003 000463 aa 032 150 146 160 hfp_arc_tangent_radians_2_ 000464 aa 137 141 162 143 000465 aa 137 164 141 156 000466 aa 147 145 156 164 000467 aa 137 162 141 144 000470 aa 151 141 156 163 000471 aa 137 062 137 000 000472 55 000035 000012 000473 0a 000016 400000 000474 55 000027 000003 000475 aa 026 141 162 143 arc_tangent_radians_2_ 000476 aa 137 164 141 156 000477 aa 147 145 156 164 000500 aa 137 162 141 144 000501 aa 151 141 156 163 000502 aa 137 062 137 000 000503 55 000047 000024 000504 0a 000034 400000 000505 55 000040 000003 000506 aa 030 150 146 160 hfp_arc_tangent_radians_ 000507 aa 137 141 162 143 000510 aa 137 164 141 156 000511 aa 147 145 156 164 000512 aa 137 162 141 144 000513 aa 151 141 156 163 000514 aa 137 000 000 000 000515 55 000060 000035 000516 0a 000012 400000 000517 55 000052 000003 000520 aa 024 141 162 143 arc_tangent_radians_ 000521 aa 137 164 141 156 000522 aa 147 145 156 164 000523 aa 137 162 141 144 000524 aa 151 141 156 163 000525 aa 137 000 000 000 000526 55 000072 000047 000527 0a 000027 400000 000530 55 000063 000003 000531 aa 032 150 146 160 hfp_arc_tangent_degrees_2_ 000532 aa 137 141 162 143 000533 aa 137 164 141 156 000534 aa 147 145 156 164 000535 aa 137 144 145 147 000536 aa 162 145 145 163 000537 aa 137 062 137 000 000540 55 000103 000060 000541 0a 000005 400000 000542 55 000075 000003 000543 aa 026 141 162 143 arc_tangent_degrees_2_ 000544 aa 137 164 141 156 000545 aa 147 145 156 164 000546 aa 137 144 145 147 000547 aa 162 145 145 163 000550 aa 137 062 137 000 000551 55 000115 000072 000552 0a 000022 400000 000553 55 000106 000003 000554 aa 030 150 146 160 hfp_arc_tangent_degrees_ 000555 aa 137 141 162 143 000556 aa 137 164 141 156 000557 aa 147 145 156 164 000560 aa 137 144 145 147 000561 aa 162 145 145 163 000562 aa 137 000 000 000 000563 55 000126 000103 000564 0a 000000 400000 000565 55 000120 000003 000566 aa 024 141 162 143 arc_tangent_degrees_ 000567 aa 137 164 141 156 000570 aa 147 145 156 164 000571 aa 137 144 145 147 000572 aa 162 145 145 163 000573 aa 137 000 000 000 000574 55 000002 000115 000575 6a 000000 400002 000576 55 000131 000003 000577 aa 014 163 171 155 symbol_table 000600 aa 142 157 154 137 000601 aa 164 141 142 154 000602 aa 145 000 000 000 DEFINITIONS HASH TABLE 000603 aa 000000 000015 000604 aa 000000 000000 000605 aa 000000 000000 000606 aa 000000 000000 000607 aa 000000 000000 000610 5a 000047 000000 000611 5a 000115 000000 000612 5a 000126 000000 000613 5a 000024 000000 000614 5a 000035 000000 000615 5a 000072 000000 000616 5a 000103 000000 000617 5a 000012 000000 000620 5a 000060 000000 EXTERNAL NAMES 000621 aa 020 143 141 154 call_math_error_ 000622 aa 154 137 155 141 000623 aa 164 150 137 145 000624 aa 162 162 157 162 000625 aa 137 000 000 000 000626 aa 002 160 151 000 pi 000627 aa 012 157 156 145 one_radian 000630 aa 137 162 141 144 000631 aa 151 141 156 000 000632 aa 016 150 146 160 hfp_one_radian 000633 aa 137 157 156 145 000634 aa 137 162 141 144 000635 aa 151 141 156 000 000636 aa 007 150 141 154 half_pi 000637 aa 146 137 160 151 000640 aa 017 155 141 164 math_constants_ 000641 aa 150 137 143 157 000642 aa 156 163 164 141 000643 aa 156 164 163 137 NO TRAP POINTER WORDS TYPE PAIR BLOCKS 000644 aa 000004 000000 000645 55 000153 000153 000646 aa 000004 000000 000647 55 000172 000160 000650 aa 000004 000000 000651 55 000172 000161 000652 aa 000004 000000 000653 55 000172 000164 000654 aa 000004 000000 000655 55 000172 000170 000656 aa 000001 000000 000657 aa 000000 000000 INTERNAL EXPRESSION WORDS 000660 5a 000176 000000 000661 5a 000200 000000 000662 5a 000206 000000 000663 5a 000204 000000 000664 5a 000202 000000 000665 aa 000000 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000446 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000022 000007 a2 000000 000000 000010 9a 777770 0000 46 math_constants_|one_radian 000011 5a 000216 0000 00 000012 9a 777766 0000 46 math_constants_|hfp_one_radian 000013 5a 000215 0000 00 000014 9a 777764 0000 46 math_constants_|half_pi 000015 5a 000214 0000 12 000016 9a 777762 0000 46 math_constants_|pi 000017 5a 000213 0000 12 000020 9a 777760 0000 46 call_math_error_|call_math_error_ 000021 5a 000212 0000 00 SYMBOL INFORMATION SYMBOL TABLE HEADER 000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000010 000004 aa 000000 117244 000005 aa 361023 525721 000006 aa 000000 117547 000007 aa 254307 666307 000010 aa 141154 155040 000011 aa 040040 040040 000012 aa 000024 000040 000013 aa 000034 000040 000014 aa 000044 000100 000015 aa 000002 000002 000016 aa 000064 000000 000017 aa 000000 000173 000020 aa 000000 000103 000021 aa 000142 000135 000022 aa 000165 000103 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 070056 061064 000030 aa 040115 141162 000031 aa 143150 040061 000032 aa 071070 071040 000033 aa 040040 040040 000034 aa 110151 162156 000035 aa 145151 163145 000036 aa 156056 123171 000037 aa 163115 141151 000040 aa 156164 056141 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 055164 141162 000045 aa 147145 164040 000046 aa 154066 070040 000047 aa 040040 040040 000050 aa 040040 040040 000051 aa 040040 040040 000052 aa 040040 040040 000053 aa 040040 040040 000054 aa 040040 040040 000055 aa 040040 040040 000056 aa 040154 151163 000057 aa 164040 163171 000060 aa 155142 157154 000061 aa 163040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000001 000066 aa 000072 000043 000067 aa 175453 017710 000070 aa 000000 117547 000071 aa 176334 600000 000072 aa 076163 160145 >spec>install>1110>arc_tangent_.alm 000073 aa 143076 151156 000074 aa 163164 141154 000075 aa 154076 061061 000076 aa 061060 076141 000077 aa 162143 137164 000100 aa 141156 147145 000101 aa 156164 137056 000102 aa 141154 155040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number 44 arctan arc_tangent_: 75, 89, 101, 115, 125, 274. 154 arctan2 arc_tangent_: 82, 95, 108, 121, 248. 213 arctan2_domain_err arc_tangent_: 256, 287. 372 arctan_of_u arc_tangent_: 223, 378. 3 arctan_z arc_tangent_: 62, 127, 226. 0 arc_tangent_degrees_ arc_tangent_: 67, 73. 5 arc_tangent_degrees_2_ arc_tangent_: 68, 80. 12 arc_tangent_radians_ arc_tangent_: 69, 87. 16 arc_tangent_radians_2_ arc_tangent_: 70, 93. 0 BFP arc_tangent_: 58, 74, 81, 88, 94. 123 calculate_for_range_1_to_7 arc_tangent_: 163, 171, 179, 183, 194, 198, 205, 215. call_math_error_ arc_tangent_: 289. 226 eps1 arc_tangent_: 147, 305. 232 eps2 arc_tangent_: 233, 307. half_pi arc_tangent_: 56, 149, 158, 257, 300. 2 HFP arc_tangent_: 59, 100, 107, 114, 120. 22 hfp_arc_tangent_degrees_ arc_tangent_: 67, 99. 27 hfp_arc_tangent_degrees_2_ arc_tangent_: 68, 106. 34 hfp_arc_tangent_radians_ arc_tangent_: 69, 113. 40 hfp_arc_tangent_radians_2_ arc_tangent_: 70, 119. hfp_one_radian arc_tangent_: 56, 102, 109. 6 indicators arc_tangent_: 65, 265, 270, 294, 299. math_constants_ arc_tangent_: 56. 236 no_overflow arc_tangent_: 266, 309. 302 one_over_u arc_tangent_: 219, 221, 342. 336 one_plus_one_over_u_squared arc_tangent_: 220, 360. one_radian arc_tangent_: 56, 76, 83. 426 p0 arc_tangent_: 244, 396. 432 p1 arc_tangent_: 242, 398. 436 p2 arc_tangent_: 240, 400. 442 p3 arc_tangent_: 239, 402. 137 part_arctan arc_tangent_: 156, 212, 222, 231. pi arc_tangent_: 56, 280. 222 quotient_too_large arc_tangent_: 268, 298. 217 quotient_too_small arc_tangent_: 269, 293. 116 range_0 arc_tangent_: 207. 114 range_0_to_1 arc_tangent_: 187, 200. 104 range_0_to_3 arc_tangent_: 137, 185. 115 range_1 arc_tangent_: 203. 112 range_2 arc_tangent_: 190, 196. 110 range_3 arc_tangent_: 192. 102 range_4 arc_tangent_: 175, 181. 76 range_4_to_5 arc_tangent_: 167, 173. 72 range_4_to_6 arc_tangent_: 140, 165. 100 range_5 arc_tangent_: 177. 74 range_6 arc_tangent_: 169. 70 range_7 arc_tangent_: 143, 161. 55 range_8 arc_tangent_: 145. 203 set_quadrant arc_tangent_: 276, 296, 301. 133 set_to_quadrant_1_or_4 arc_tangent_: 150, 159, 213, 225. 266 tan_11_pi_by_32 arc_tangent_: 166, 330. 272 tan_13_pi_by_32 arc_tangent_: 139, 333. 276 tan_15_pi_by_32 arc_tangent_: 142, 336. 246 tan_3_pi_by_32 arc_tangent_: 186, 318. 252 tan_5_pi_by_32 arc_tangent_: 189, 321. 256 tan_7_pi_by_32 arc_tangent_: 136, 324. 262 tan_9_pi_by_32 arc_tangent_: 174, 327. 242 tan_pi_by_32 arc_tangent_: 201, 315. 4 x arc_tangent_: 63, 250, 255, 258, 267, 281. 5 y arc_tangent_: 64, 253, 277. 171 y_not_zero arc_tangent_: 254, 264. 0 z arc_tangent_: 60, 236, 237, 245. 2 zz arc_tangent_: 61, 238, 241, 243. NO FATAL ERRORS ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved