Ticket #7879: trac_7879harmless_fuzz_2.diff
File trac_7879harmless_fuzz_2.diff, 16.1 KB (added by , 11 years ago) 


.patch
old new 1 1 # HG changeset patch 2 2 # User Robert Bradshaw <robertwb@math.washington.edu> 3 3 # Date 1263066099 28800 4 # Node ID 8cdc0dd8ba61b3ecb646dedf14650ab13d7f54055 # Parent c8f01838c8d5e7abece0ca915bab4c47b7d5b3da4 # Node ID 925df2316d52179ed2025dcdc46c63120b32c8fe 5 # Parent eb1b6cc7087907589a6592e331a3adfbc78b2014 6 6 Trac #7879: Remove unnecessary signal handling for low prec mpfr operations. 7 7 8 diff  r c8f01838c8d5 r 8cdc0dd8ba61sage/rings/real_mpfr.pyx9  a/sage/rings/real_mpfr.pyx Fri Mar 04 00:34:43 2011 080010 +++ b/sage/rings/real_mpfr.pyx Sat Jan 09 11:41:39 2010 080011 @@ 16 5,6 +165,11 @@8 diff git a/sage/rings/real_mpfr.pyx b/sage/rings/real_mpfr.pyx 9  a/sage/rings/real_mpfr.pyx 10 +++ b/sage/rings/real_mpfr.pyx 11 @@ 167,6 +167,11 @@ 12 12 cdef object numpy_double_interface = {'typestr': '=f8'} 13 13 cdef object numpy_object_interface = {'typestr': 'O'} 14 14 … … 20 20 #***************************************************************************** 21 21 # 22 22 # External Python access to constants 23 @@ 8 08,9 +813,8 @@23 @@ 810,9 +815,8 @@ 24 24 sage: R.pi().sqrt()/2 25 25 0.88622692545275801364908374167057259139877473 26 26 """ … … 32 32 # The docs for mpfr_free_cache say "Free the cache used by 33 33 # the functions computing constants if needed (currently 34 34 # mpfr_const_log2, mpfr_const_pi and mpfr_const_euler)", so 35 @@ 82 0,7 +824,7 @@35 @@ 822,7 +826,7 @@ 36 36 # functions, but this free is needed for them too! 37 37 mpfr_free_cache() 38 38 mpfr_const_pi(x.value, self.rnd) … … 41 41 return x 42 42 43 43 44 @@ 83 4,8 +838,7 @@44 @@ 836,8 +840,7 @@ 45 45 sage: RealField(100).euler_constant() 46 46 0.57721566490153286060651209008 47 47 """ … … 51 51 sig_on() 52 52 mpfr_free_cache() 53 53 mpfr_const_euler(x.value, self.rnd) 54 @@ 85 2,12 +855,11 @@54 @@ 854,12 +857,11 @@ 55 55 sage: RealField(100).catalan_constant() 56 56 0.91596559417721901505460351493 57 57 """ … … 67 67 return x 68 68 69 69 # int mpfr_const_log2 (mpfr_t rop, mp_rnd_t rnd) 70 @@ 87 5,10 +877,10 @@70 @@ 877,10 +879,10 @@ 71 71 0.69314718055994530941723212146 72 72 """ 73 73 cdef RealNumber x = self._new() … … 80 80 return x 81 81 82 82 def random_element(self, min=1, max=1, distribution=None): 83 @@ 96 1,9 +963,9 @@83 @@ 963,9 +965,9 @@ 84 84 if n < 0: 85 85 raise ArithmeticError, "n must be nonnegative" 86 86 x = self._new() … … 92 92 return x 93 93 94 94 def rounding_mode(self): 95 @@ 186 6,8 +1868,7 @@95 @@ 1868,8 +1870,7 @@ 96 96 sage: R(1.5) + R(2.5) 97 97 1.00000000000000 98 98 """ … … 102 102 mpfr_add(x.value, self.value, (<RealNumber>other).value, (<RealField_class>self._parent).rnd) 103 103 return x 104 104 105 @@ 188 4,8 +1885,7 @@105 @@ 1886,8 +1887,7 @@ 106 106 sage: R(1.5)  R(2.5) 107 107 4.00000000000000 108 108 """ … … 112 112 mpfr_sub(x.value, self.value, (<RealNumber>right).value, (<RealField_class> self._parent).rnd) 113 113 return x 114 114 115 @@ 19 19,8 +1919,7 @@115 @@ 1921,8 +1921,7 @@ 116 116 sage: parent(b*a) 117 117 Real Field with 20 bits of precision 118 118 """ … … 122 122 mpfr_mul(x.value, self.value, (<RealNumber>right).value, (<RealField_class>self._parent).rnd) 123 123 return x 124 124 125 @@ 194 3,8 +1942,7 @@125 @@ 1945,8 +1944,7 @@ 126 126 sage: R(1.5) / R(2.5) 127 127 0.600000000000000 128 128 """ … … 132 132 mpfr_div((<RealNumber>x).value, self.value, 133 133 (<RealNumber>right).value, (<RealField_class>self._parent).rnd) 134 134 return x 135 @@ 196 2,8 +1960,7 @@135 @@ 1964,8 +1962,7 @@ 136 136 sage: RR('nan')._neg_() 137 137 NaN 138 138 """ … … 142 142 mpfr_neg(x.value, self.value, (<RealField_class>self._parent).rnd) 143 143 return x 144 144 145 @@  1999,8 +1996,7 @@145 @@ 2001,8 +1998,7 @@ 146 146 sage: RR('nan').abs() 147 147 NaN 148 148 """ … … 152 152 mpfr_abs(x.value, self.value, (<RealField_class>self._parent).rnd) 153 153 return x 154 154 155 @@ 205 6,8 +2052,7 @@155 @@ 2058,8 +2054,7 @@ 156 156 """ 157 157 if n > sys.maxint: 158 158 raise OverflowError, "n (=%s) must be <= %s"%(n, sys.maxint) … … 162 162 mpfr_div_2exp(x.value, self.value, n, (<RealField_class>self._parent).rnd) 163 163 return x 164 164 165 @@ 224 6,8 +2241,7 @@165 @@ 2248,8 +2243,7 @@ 166 166 sage: RR(0.5).round() 167 167 1 168 168 """ … … 172 172 mpfr_round(x.value, self.value) 173 173 return x.integer_part() 174 174 175 @@ 232 4,8 +2318,7 @@175 @@ 2326,8 +2320,7 @@ 176 176 sage: (0.00).trunc() 177 177 0 178 178 """ … … 182 182 mpfr_trunc(x.value, self.value) 183 183 return x.integer_part() 184 184 185 @@ 23 78,8 +2371,7 @@185 @@ 2380,8 +2373,7 @@ 186 186 else: 187 187 other_rn = self._parent(other) 188 188 … … 192 192 193 193 mpfr_set(x.value, self.value, GMP_RNDN) 194 194 mpfr_nexttoward(x.value, other_rn.value) 195 @@ 240 4,8 +2396,7 @@195 @@ 2406,8 +2398,7 @@ 196 196 '1.4142135623730949' 197 197 """ 198 198 … … 202 202 mpfr_set(x.value, self.value, GMP_RNDN) 203 203 mpfr_nextabove(x.value) 204 204 205 @@ 24 29,8 +2420,7 @@205 @@ 2431,8 +2422,7 @@ 206 206 '1.4142135623730954' 207 207 """ 208 208 … … 212 212 mpfr_set(x.value, self.value, GMP_RNDN) 213 213 mpfr_nextbelow(x.value) 214 214 215 @@ 339 6,9 +3386,9 @@215 @@ 3397,9 +3387,9 @@ 216 216 cdef RealNumber x 217 217 if mpfr_cmp_ui(self.value, 0) >= 0: 218 218 x = self._new() … … 224 224 if all: 225 225 if x.is_zero(): 226 226 return [x] 227 @@ 344 1,11 +3431,10 @@227 @@ 3442,11 +3432,10 @@ 228 228 sage: r.cube_root()^3  r # illustrates precision loss 229 229 1.42108547152020e14 230 230 """ … … 239 239 return x 240 240 241 241 def __pow(self, RealNumber exponent): 242 @@ 35 42,9 +3531,9 @@242 @@ 3569,9 +3558,9 @@ 243 243 return self._complex_number_().log(base) 244 244 if base == 'e': 245 245 x = self._new() … … 251 251 return x 252 252 elif base == 10: 253 253 return self.log10() 254 @@ 3 583,9 +3572,9 @@254 @@ 3610,9 +3599,9 @@ 255 255 if self < 0: 256 256 return self._complex_number_().log(2) 257 257 x = self._new() … … 263 263 return x 264 264 265 265 def log10(self): 266 @@ 36 20,9 +3609,9 @@266 @@ 3647,9 +3636,9 @@ 267 267 if self < 0: 268 268 return self._complex_number_().log(10) 269 269 x = self._new() … … 275 275 return x 276 276 277 277 def log1p(self): 278 @@ 36 36,6 +3625,18 @@279 sage: ( r+1).log()280 2. 77258872223978278 @@ 3675,6 +3664,18 @@ 279 sage: (1+r100).log() 280 2.9999999995500000000978021372e10 281 281 282 282 + For small values, this is more accurate than computing `log(1 + self)` 283 283 + directly, as it avoid cancelation issues:: … … 294 294 :: 295 295 296 296 sage: r = 38.9; r.log1p() 297 @@ 36 57,9 +3658,9 @@297 @@ 3696,9 +3697,9 @@ 298 298 if self < 1: 299 299 return (self+1.0)._complex_number_().log() 300 300 x = self._new() … … 306 306 return x 307 307 308 308 def exp(self): 309 @@ 3 686,8 +3687,7 @@309 @@ 3725,8 +3726,7 @@ 310 310 sage: r.exp() 311 311 9.38184458849869e15 312 312 """ … … 316 316 sig_on() 317 317 mpfr_exp(x.value, self.value, (<RealField_class>self._parent).rnd) 318 318 sig_off() 319 @@ 37 15,11 +3715,10 @@319 @@ 3754,11 +3754,10 @@ 320 320 sage: r.exp2() 321 321 1.89117248253021e10 322 322 """ … … 331 331 return x 332 332 333 333 def exp10(self): 334 @@ 37 44,11 +3743,10 @@334 @@ 3783,11 +3782,10 @@ 335 335 sage: r.exp10() 336 336 5.01187233627276e33 337 337 """ … … 346 346 return x 347 347 348 348 def expm1(self): 349 @@ 3 770,11 +3768,10 @@349 @@ 3809,11 +3807,10 @@ 350 350 sage: r.expm1() 351 351 1.00000000000000e16 352 352 """ … … 361 361 return x 362 362 363 363 def eint(self): 364 @@ 3 793,11 +3790,10 @@364 @@ 3832,11 +3829,10 @@ 365 365 sage: r.eint() 366 366 NaN 367 367 """ … … 376 376 return x 377 377 378 378 def cos(self): 379 @@ 38 10,9 +3806,8 @@379 @@ 3849,9 +3845,8 @@ 380 380 sage: t.cos() 381 381 6.12323399573677e17 382 382 """ … … 388 388 mpfr_cos(x.value, self.value, (<RealField_class>self._parent).rnd) 389 389 sig_off() 390 390 return x 391 @@ 38 36,8 +3831,7 @@391 @@ 3875,8 +3870,7 @@ 392 392 sage: R(2).sin() 393 393 0.90929742682568169539601986591 394 394 """ … … 398 398 sig_on() 399 399 mpfr_sin(x.value, self.value, (<RealField_class>self._parent).rnd) 400 400 sig_off() 401 @@ 38 56,8 +3850,7 @@401 @@ 3895,8 +3889,7 @@ 402 402 sage: q.tan() 403 403 0.577350269189626 404 404 """ … … 408 408 sig_on() 409 409 mpfr_tan(x.value, self.value, (<RealField_class>self._parent).rnd) 410 410 sig_off() 411 @@ 3 896,8 +3889,7 @@411 @@ 3935,8 +3928,7 @@ 412 412 sage: i.arccos() == q 413 413 True 414 414 """ … … 418 418 sig_on() 419 419 mpfr_acos(x.value, self.value, (<RealField_class>self._parent).rnd) 420 420 sig_off() 421 @@ 39 16,8 +3908,7 @@421 @@ 3955,8 +3947,7 @@ 422 422 sage: i.arcsin()  q 423 423 0.000000000000000 424 424 """ … … 428 428 sig_on() 429 429 mpfr_asin(x.value, self.value, (<RealField_class>self._parent).rnd) 430 430 sig_off() 431 @@ 39 34,8 +3925,7 @@431 @@ 3973,8 +3964,7 @@ 432 432 sage: i.arctan() == q 433 433 True 434 434 """ … … 438 438 sig_on() 439 439 mpfr_atan(x.value, self.value, (<RealField_class>self._parent).rnd) 440 440 sig_off() 441 @@ 39 55,8 +3945,7 @@441 @@ 3994,8 +3984,7 @@ 442 442 sage: q.cosh() 443 443 1.03446564009551 444 444 """ … … 448 448 sig_on() 449 449 mpfr_cosh(x.value, self.value, (<RealField_class>self._parent).rnd) 450 450 sig_off() 451 @@  3972,8 +3961,7 @@451 @@ 4011,8 +4000,7 @@ 452 452 sage: q.sinh() 453 453 0.264800227602271 454 454 """ … … 458 458 sig_on() 459 459 mpfr_sinh(x.value, self.value, (<RealField_class>self._parent).rnd) 460 460 sig_off() 461 @@  3989,8 +3977,7 @@461 @@ 4028,8 +4016,7 @@ 462 462 sage: q.tanh() 463 463 0.278079429295850 464 464 """ … … 468 468 sig_on() 469 469 mpfr_tanh(x.value, self.value, (<RealField_class>self._parent).rnd) 470 470 sig_off() 471 @@ 40 05,8 +3992,7 @@471 @@ 4044,8 +4031,7 @@ 472 472 sage: RealField(100)(2).coth() 473 473 1.0373147207275480958778097648 474 474 """ … … 478 478 sig_on() 479 479 mpfr_coth(x.value, self.value, (<RealField_class>self._parent).rnd) 480 480 sig_off() 481 @@ 40 34,8 +4020,7 @@481 @@ 4073,8 +4059,7 @@ 482 482 sage: RealField(100)(2).cot() 483 483 0.45765755436028576375027741043 484 484 """ … … 488 488 sig_on() 489 489 mpfr_cot(x.value, self.value, (<RealField_class>self._parent).rnd) 490 490 sig_off() 491 @@ 40 50,8 +4035,7 @@491 @@ 4089,8 +4074,7 @@ 492 492 sage: RealField(100)(2).csch() 493 493 0.27572056477178320775835148216 494 494 """ … … 498 498 sig_on() 499 499 mpfr_csch(x.value, self.value, (<RealField_class>self._parent).rnd) 500 500 sig_off() 501 @@ 4 079,8 +4063,7 @@501 @@ 4118,8 +4102,7 @@ 502 502 sage: RealField(100)(2).csc() 503 503 1.0997501702946164667566973970 504 504 """ … … 508 508 sig_on() 509 509 mpfr_csc(x.value, self.value, (<RealField_class>self._parent).rnd) 510 510 sig_off() 511 @@ 4 095,8 +4078,7 @@511 @@ 4134,8 +4117,7 @@ 512 512 sage: RealField(100)(2).sech() 513 513 0.26580222883407969212086273982 514 514 """ … … 518 518 sig_on() 519 519 mpfr_sech(x.value, self.value, (<RealField_class>self._parent).rnd) 520 520 sig_off() 521 @@ 41 24,8 +4106,7 @@521 @@ 4163,8 +4145,7 @@ 522 522 sage: RealField(100)(2).sec() 523 523 2.4029979617223809897546004014 524 524 """ … … 528 528 sig_on() 529 529 mpfr_sec(x.value, self.value, (<RealField_class>self._parent).rnd) 530 530 sig_off() 531 @@ 41 43,8 +4124,7 @@531 @@ 4182,8 +4163,7 @@ 532 532 sage: q == i.arccosh() 533 533 True 534 534 """ … … 538 538 sig_on() 539 539 mpfr_acosh(x.value, self.value, (<RealField_class>self._parent).rnd) 540 540 sig_off() 541 @@ 4 162,8 +4142,7 @@541 @@ 4201,8 +4181,7 @@ 542 542 sage: i.arcsinh()  q 543 543 0.000000000000000 544 544 """ … … 548 548 sig_on() 549 549 mpfr_asinh(x.value, self.value, (<RealField_class>self._parent).rnd) 550 550 sig_off() 551 @@ 4 181,8 +4160,7 @@551 @@ 4220,8 +4199,7 @@ 552 552 sage: i.arctanh()  q 553 553 0.000000000000000 554 554 """ … … 558 558 sig_on() 559 559 mpfr_atanh(x.value, self.value, (<RealField_class>self._parent).rnd) 560 560 sig_off() 561 @@ 4 272,8 +4250,7 @@561 @@ 4311,8 +4289,7 @@ 562 562 sage: R(6).erf() 563 563 1.00000000000000 564 564 """ … … 568 568 sig_on() 569 569 mpfr_erf(x.value, self.value, (<RealField_class>self._parent).rnd) 570 570 sig_off() 571 @@ 4 292,8 +4269,7 @@571 @@ 4331,8 +4308,7 @@ 572 572 sage: R(6).erfc() 573 573 2.15197367124989e17 574 574 """ … … 578 578 sig_on() 579 579 mpfr_erfc(x.value, self.value, (<RealField_class>self._parent).rnd) 580 580 sig_off() 581 @@ 43 09,8 +4285,7 @@581 @@ 4348,8 +4324,7 @@ 582 582 sage: R(2).j0() 583 583 0.223890779141236 584 584 """ … … 588 588 sig_on() 589 589 mpfr_j0(x.value, self.value, (<RealField_class>self._parent).rnd) 590 590 sig_off() 591 @@ 43 26,8 +4301,7 @@591 @@ 4365,8 +4340,7 @@ 592 592 sage: R(2).j1() 593 593 0.576724807756873 594 594 """ … … 598 598 sig_on() 599 599 mpfr_j1(x.value, self.value, (<RealField_class>self._parent).rnd) 600 600 sig_off() 601 @@ 43 46,8 +4320,7 @@601 @@ 4385,8 +4359,7 @@ 602 602 sage: R(2).jn(17) 603 603 2.65930780516787e15 604 604 """ … … 608 608 sig_on() 609 609 mpfr_jn(x.value, n, self.value, (<RealField_class>self._parent).rnd) 610 610 sig_off() 611 @@ 4 363,8 +4336,7 @@611 @@ 4402,8 +4375,7 @@ 612 612 sage: R(2).y0() 613 613 0.510375672649745 614 614 """ … … 618 618 sig_on() 619 619 mpfr_y0(x.value, self.value, (<RealField_class>self._parent).rnd) 620 620 sig_off() 621 @@ 4 380,8 +4352,7 @@621 @@ 4419,8 +4391,7 @@ 622 622 sage: R(2).y1() 623 623 0.107032431540938 624 624 """ … … 628 628 sig_on() 629 629 mpfr_y1(x.value, self.value, (<RealField_class>self._parent).rnd) 630 630 sig_off() 631 @@ 44 00,8 +4371,7 @@631 @@ 4439,8 +4410,7 @@ 632 632 sage: R(2).yn(17) 633 633 7.09038821729481e12 634 634 """ … … 638 638 sig_on() 639 639 mpfr_yn(x.value, n, self.value, (<RealField_class>self._parent).rnd) 640 640 sig_off() 641 @@ 44 19,11 +4389,10 @@641 @@ 4458,11 +4428,10 @@ 642 642 sage: R(1.5).gamma() 643 643 0.886226925452758 644 644 """ … … 653 653 return x 654 654 655 655 def lngamma(self): 656 @@ 44 54,11 +4423,10 @@656 @@ 4493,11 +4462,10 @@ 657 657 sage: R(1e10).log_gamma() 658 658 2.20258509288811e11 659 659 """ … … 668 668 return x 669 669 670 670 def zeta(self): 671 @@ 45 06,8 +4474,7 @@671 @@ 4545,8 +4513,7 @@ 672 672 sage: R(z) 673 673 1.64493406684823 674 674 """