1/* Math module -- standard C math library functions, pi and e */ 2 3/* Here are some comments from Tim Peters, extracted from the 4 discussion attached to http://bugs.python.org/issue1640. They 5 describe the general aims of the math module with respect to 6 special values, IEEE-754 floating-point exceptions, and Python 7 exceptions. 8 9These are the "spirit of 754" rules: 10 111. If the mathematical result is a real number, but of magnitude too 12large to approximate by a machine float, overflow is signaled and the 13result is an infinity (with the appropriate sign). 14 152. If the mathematical result is a real number, but of magnitude too 16small to approximate by a machine float, underflow is signaled and the 17result is a zero (with the appropriate sign). 18 193. At a singularity (a value x such that the limit of f(y) as y 20approaches x exists and is an infinity), "divide by zero" is signaled 21and the result is an infinity (with the appropriate sign). This is 22complicated a little by that the left-side and right-side limits may 23not be the same; e.g., 1/x approaches +inf or -inf as x approaches 0 24from the positive or negative directions. In that specific case, the 25sign of the zero determines the result of 1/0. 26 274. At a point where a function has no defined result in the extended 28reals (i.e., the reals plus an infinity or two), invalid operation is 29signaled and a NaN is returned. 30 31And these are what Python has historically /tried/ to do (but not 32always successfully, as platform libm behavior varies a lot): 33 34For #1, raise OverflowError. 35 36For #2, return a zero (with the appropriate sign if that happens by 37accident ;-)). 38 39For #3 and #4, raise ValueError. It may have made sense to raise 40Python's ZeroDivisionError in #3, but historically that's only been 41raised for division by zero and mod by zero. 42 43*/ 44 45/* 46 In general, on an IEEE-754 platform the aim is to follow the C99 47 standard, including Annex 'F', whenever possible. Where the 48 standard recommends raising the 'divide-by-zero' or 'invalid' 49 floating-point exceptions, Python should raise a ValueError. Where 50 the standard recommends raising 'overflow', Python should raise an 51 OverflowError. In all other circumstances a value should be 52 returned. 53 */ 54 55#ifndef Py_BUILD_CORE_BUILTIN 56# define Py_BUILD_CORE_MODULE 1 57#endif 58#define NEEDS_PY_IDENTIFIER 59 60#include "Python.h" 61#include "pycore_bitutils.h" // _Py_bit_length() 62#include "pycore_call.h" // _PyObject_CallNoArgs() 63#include "pycore_dtoa.h" // _Py_dg_infinity() 64#include "pycore_long.h" // _PyLong_GetZero() 65#include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR 66/* For DBL_EPSILON in _math.h */ 67#include <float.h> 68/* For _Py_log1p with workarounds for buggy handling of zeros. */ 69#include "_math.h" 70 71#include "clinic/mathmodule.c.h" 72 73/*[clinic input] 74module math 75[clinic start generated code]*/ 76/*[clinic end generated code: output=da39a3ee5e6b4b0d input=76bc7002685dd942]*/ 77 78 79/* 80 sin(pi*x), giving accurate results for all finite x (especially x 81 integral or close to an integer). This is here for use in the 82 reflection formula for the gamma function. It conforms to IEEE 83 754-2008 for finite arguments, but not for infinities or nans. 84*/ 85 86static const double pi = 3.141592653589793238462643383279502884197; 87static const double logpi = 1.144729885849400174143427351353058711647; 88#if !defined(HAVE_ERF) || !defined(HAVE_ERFC) 89static const double sqrtpi = 1.772453850905516027298167483341145182798; 90#endif /* !defined(HAVE_ERF) || !defined(HAVE_ERFC) */ 91 92 93/* Version of PyFloat_AsDouble() with in-line fast paths 94 for exact floats and integers. Gives a substantial 95 speed improvement for extracting float arguments. 96*/ 97 98#define ASSIGN_DOUBLE(target_var, obj, error_label) \ 99 if (PyFloat_CheckExact(obj)) { \ 100 target_var = PyFloat_AS_DOUBLE(obj); \ 101 } \ 102 else if (PyLong_CheckExact(obj)) { \ 103 target_var = PyLong_AsDouble(obj); \ 104 if (target_var == -1.0 && PyErr_Occurred()) { \ 105 goto error_label; \ 106 } \ 107 } \ 108 else { \ 109 target_var = PyFloat_AsDouble(obj); \ 110 if (target_var == -1.0 && PyErr_Occurred()) { \ 111 goto error_label; \ 112 } \ 113 } 114 115static double 116m_sinpi(double x) 117{ 118 double y, r; 119 int n; 120 /* this function should only ever be called for finite arguments */ 121 assert(Py_IS_FINITE(x)); 122 y = fmod(fabs(x), 2.0); 123 n = (int)round(2.0*y); 124 assert(0 <= n && n <= 4); 125 switch (n) { 126 case 0: 127 r = sin(pi*y); 128 break; 129 case 1: 130 r = cos(pi*(y-0.5)); 131 break; 132 case 2: 133 /* N.B. -sin(pi*(y-1.0)) is *not* equivalent: it would give 134 -0.0 instead of 0.0 when y == 1.0. */ 135 r = sin(pi*(1.0-y)); 136 break; 137 case 3: 138 r = -cos(pi*(y-1.5)); 139 break; 140 case 4: 141 r = sin(pi*(y-2.0)); 142 break; 143 default: 144 Py_UNREACHABLE(); 145 } 146 return copysign(1.0, x)*r; 147} 148 149/* Implementation of the real gamma function. In extensive but non-exhaustive 150 random tests, this function proved accurate to within <= 10 ulps across the 151 entire float domain. Note that accuracy may depend on the quality of the 152 system math functions, the pow function in particular. Special cases 153 follow C99 annex F. The parameters and method are tailored to platforms 154 whose double format is the IEEE 754 binary64 format. 155 156 Method: for x > 0.0 we use the Lanczos approximation with parameters N=13 157 and g=6.024680040776729583740234375; these parameters are amongst those 158 used by the Boost library. Following Boost (again), we re-express the 159 Lanczos sum as a rational function, and compute it that way. The 160 coefficients below were computed independently using MPFR, and have been 161 double-checked against the coefficients in the Boost source code. 162 163 For x < 0.0 we use the reflection formula. 164 165 There's one minor tweak that deserves explanation: Lanczos' formula for 166 Gamma(x) involves computing pow(x+g-0.5, x-0.5) / exp(x+g-0.5). For many x 167 values, x+g-0.5 can be represented exactly. However, in cases where it 168 can't be represented exactly the small error in x+g-0.5 can be magnified 169 significantly by the pow and exp calls, especially for large x. A cheap 170 correction is to multiply by (1 + e*g/(x+g-0.5)), where e is the error 171 involved in the computation of x+g-0.5 (that is, e = computed value of 172 x+g-0.5 - exact value of x+g-0.5). Here's the proof: 173 174 Correction factor 175 ----------------- 176 Write x+g-0.5 = y-e, where y is exactly representable as an IEEE 754 177 double, and e is tiny. Then: 178 179 pow(x+g-0.5,x-0.5)/exp(x+g-0.5) = pow(y-e, x-0.5)/exp(y-e) 180 = pow(y, x-0.5)/exp(y) * C, 181 182 where the correction_factor C is given by 183 184 C = pow(1-e/y, x-0.5) * exp(e) 185 186 Since e is tiny, pow(1-e/y, x-0.5) ~ 1-(x-0.5)*e/y, and exp(x) ~ 1+e, so: 187 188 C ~ (1-(x-0.5)*e/y) * (1+e) ~ 1 + e*(y-(x-0.5))/y 189 190 But y-(x-0.5) = g+e, and g+e ~ g. So we get C ~ 1 + e*g/y, and 191 192 pow(x+g-0.5,x-0.5)/exp(x+g-0.5) ~ pow(y, x-0.5)/exp(y) * (1 + e*g/y), 193 194 Note that for accuracy, when computing r*C it's better to do 195 196 r + e*g/y*r; 197 198 than 199 200 r * (1 + e*g/y); 201 202 since the addition in the latter throws away most of the bits of 203 information in e*g/y. 204*/ 205 206#define LANCZOS_N 13 207static const double lanczos_g = 6.024680040776729583740234375; 208static const double lanczos_g_minus_half = 5.524680040776729583740234375; 209static const double lanczos_num_coeffs[LANCZOS_N] = { 210 23531376880.410759688572007674451636754734846804940, 211 42919803642.649098768957899047001988850926355848959, 212 35711959237.355668049440185451547166705960488635843, 213 17921034426.037209699919755754458931112671403265390, 214 6039542586.3520280050642916443072979210699388420708, 215 1439720407.3117216736632230727949123939715485786772, 216 248874557.86205415651146038641322942321632125127801, 217 31426415.585400194380614231628318205362874684987640, 218 2876370.6289353724412254090516208496135991145378768, 219 186056.26539522349504029498971604569928220784236328, 220 8071.6720023658162106380029022722506138218516325024, 221 210.82427775157934587250973392071336271166969580291, 222 2.5066282746310002701649081771338373386264310793408 223}; 224 225/* denominator is x*(x+1)*...*(x+LANCZOS_N-2) */ 226static const double lanczos_den_coeffs[LANCZOS_N] = { 227 0.0, 39916800.0, 120543840.0, 150917976.0, 105258076.0, 45995730.0, 228 13339535.0, 2637558.0, 357423.0, 32670.0, 1925.0, 66.0, 1.0}; 229 230/* gamma values for small positive integers, 1 though NGAMMA_INTEGRAL */ 231#define NGAMMA_INTEGRAL 23 232static const double gamma_integral[NGAMMA_INTEGRAL] = { 233 1.0, 1.0, 2.0, 6.0, 24.0, 120.0, 720.0, 5040.0, 40320.0, 362880.0, 234 3628800.0, 39916800.0, 479001600.0, 6227020800.0, 87178291200.0, 235 1307674368000.0, 20922789888000.0, 355687428096000.0, 236 6402373705728000.0, 121645100408832000.0, 2432902008176640000.0, 237 51090942171709440000.0, 1124000727777607680000.0, 238}; 239 240/* Lanczos' sum L_g(x), for positive x */ 241 242static double 243lanczos_sum(double x) 244{ 245 double num = 0.0, den = 0.0; 246 int i; 247 assert(x > 0.0); 248 /* evaluate the rational function lanczos_sum(x). For large 249 x, the obvious algorithm risks overflow, so we instead 250 rescale the denominator and numerator of the rational 251 function by x**(1-LANCZOS_N) and treat this as a 252 rational function in 1/x. This also reduces the error for 253 larger x values. The choice of cutoff point (5.0 below) is 254 somewhat arbitrary; in tests, smaller cutoff values than 255 this resulted in lower accuracy. */ 256 if (x < 5.0) { 257 for (i = LANCZOS_N; --i >= 0; ) { 258 num = num * x + lanczos_num_coeffs[i]; 259 den = den * x + lanczos_den_coeffs[i]; 260 } 261 } 262 else { 263 for (i = 0; i < LANCZOS_N; i++) { 264 num = num / x + lanczos_num_coeffs[i]; 265 den = den / x + lanczos_den_coeffs[i]; 266 } 267 } 268 return num/den; 269} 270 271/* Constant for +infinity, generated in the same way as float('inf'). */ 272 273static double 274m_inf(void) 275{ 276#if _PY_SHORT_FLOAT_REPR == 1 277 return _Py_dg_infinity(0); 278#else 279 return Py_HUGE_VAL; 280#endif 281} 282 283/* Constant nan value, generated in the same way as float('nan'). */ 284/* We don't currently assume that Py_NAN is defined everywhere. */ 285 286#if _PY_SHORT_FLOAT_REPR == 1 287 288static double 289m_nan(void) 290{ 291#if _PY_SHORT_FLOAT_REPR == 1 292 return _Py_dg_stdnan(0); 293#else 294 return Py_NAN; 295#endif 296} 297 298#endif 299 300static double 301m_tgamma(double x) 302{ 303 double absx, r, y, z, sqrtpow; 304 305 /* special cases */ 306 if (!Py_IS_FINITE(x)) { 307 if (Py_IS_NAN(x) || x > 0.0) 308 return x; /* tgamma(nan) = nan, tgamma(inf) = inf */ 309 else { 310 errno = EDOM; 311 return Py_NAN; /* tgamma(-inf) = nan, invalid */ 312 } 313 } 314 if (x == 0.0) { 315 errno = EDOM; 316 /* tgamma(+-0.0) = +-inf, divide-by-zero */ 317 return copysign(Py_HUGE_VAL, x); 318 } 319 320 /* integer arguments */ 321 if (x == floor(x)) { 322 if (x < 0.0) { 323 errno = EDOM; /* tgamma(n) = nan, invalid for */ 324 return Py_NAN; /* negative integers n */ 325 } 326 if (x <= NGAMMA_INTEGRAL) 327 return gamma_integral[(int)x - 1]; 328 } 329 absx = fabs(x); 330 331 /* tiny arguments: tgamma(x) ~ 1/x for x near 0 */ 332 if (absx < 1e-20) { 333 r = 1.0/x; 334 if (Py_IS_INFINITY(r)) 335 errno = ERANGE; 336 return r; 337 } 338 339 /* large arguments: assuming IEEE 754 doubles, tgamma(x) overflows for 340 x > 200, and underflows to +-0.0 for x < -200, not a negative 341 integer. */ 342 if (absx > 200.0) { 343 if (x < 0.0) { 344 return 0.0/m_sinpi(x); 345 } 346 else { 347 errno = ERANGE; 348 return Py_HUGE_VAL; 349 } 350 } 351 352 y = absx + lanczos_g_minus_half; 353 /* compute error in sum */ 354 if (absx > lanczos_g_minus_half) { 355 /* note: the correction can be foiled by an optimizing 356 compiler that (incorrectly) thinks that an expression like 357 a + b - a - b can be optimized to 0.0. This shouldn't 358 happen in a standards-conforming compiler. */ 359 double q = y - absx; 360 z = q - lanczos_g_minus_half; 361 } 362 else { 363 double q = y - lanczos_g_minus_half; 364 z = q - absx; 365 } 366 z = z * lanczos_g / y; 367 if (x < 0.0) { 368 r = -pi / m_sinpi(absx) / absx * exp(y) / lanczos_sum(absx); 369 r -= z * r; 370 if (absx < 140.0) { 371 r /= pow(y, absx - 0.5); 372 } 373 else { 374 sqrtpow = pow(y, absx / 2.0 - 0.25); 375 r /= sqrtpow; 376 r /= sqrtpow; 377 } 378 } 379 else { 380 r = lanczos_sum(absx) / exp(y); 381 r += z * r; 382 if (absx < 140.0) { 383 r *= pow(y, absx - 0.5); 384 } 385 else { 386 sqrtpow = pow(y, absx / 2.0 - 0.25); 387 r *= sqrtpow; 388 r *= sqrtpow; 389 } 390 } 391 if (Py_IS_INFINITY(r)) 392 errno = ERANGE; 393 return r; 394} 395 396/* 397 lgamma: natural log of the absolute value of the Gamma function. 398 For large arguments, Lanczos' formula works extremely well here. 399*/ 400 401static double 402m_lgamma(double x) 403{ 404 double r; 405 double absx; 406 407 /* special cases */ 408 if (!Py_IS_FINITE(x)) { 409 if (Py_IS_NAN(x)) 410 return x; /* lgamma(nan) = nan */ 411 else 412 return Py_HUGE_VAL; /* lgamma(+-inf) = +inf */ 413 } 414 415 /* integer arguments */ 416 if (x == floor(x) && x <= 2.0) { 417 if (x <= 0.0) { 418 errno = EDOM; /* lgamma(n) = inf, divide-by-zero for */ 419 return Py_HUGE_VAL; /* integers n <= 0 */ 420 } 421 else { 422 return 0.0; /* lgamma(1) = lgamma(2) = 0.0 */ 423 } 424 } 425 426 absx = fabs(x); 427 /* tiny arguments: lgamma(x) ~ -log(fabs(x)) for small x */ 428 if (absx < 1e-20) 429 return -log(absx); 430 431 /* Lanczos' formula. We could save a fraction of a ulp in accuracy by 432 having a second set of numerator coefficients for lanczos_sum that 433 absorbed the exp(-lanczos_g) term, and throwing out the lanczos_g 434 subtraction below; it's probably not worth it. */ 435 r = log(lanczos_sum(absx)) - lanczos_g; 436 r += (absx - 0.5) * (log(absx + lanczos_g - 0.5) - 1); 437 if (x < 0.0) 438 /* Use reflection formula to get value for negative x. */ 439 r = logpi - log(fabs(m_sinpi(absx))) - log(absx) - r; 440 if (Py_IS_INFINITY(r)) 441 errno = ERANGE; 442 return r; 443} 444 445#if !defined(HAVE_ERF) || !defined(HAVE_ERFC) 446 447/* 448 Implementations of the error function erf(x) and the complementary error 449 function erfc(x). 450 451 Method: we use a series approximation for erf for small x, and a continued 452 fraction approximation for erfc(x) for larger x; 453 combined with the relations erf(-x) = -erf(x) and erfc(x) = 1.0 - erf(x), 454 this gives us erf(x) and erfc(x) for all x. 455 456 The series expansion used is: 457 458 erf(x) = x*exp(-x*x)/sqrt(pi) * [ 459 2/1 + 4/3 x**2 + 8/15 x**4 + 16/105 x**6 + ...] 460 461 The coefficient of x**(2k-2) here is 4**k*factorial(k)/factorial(2*k). 462 This series converges well for smallish x, but slowly for larger x. 463 464 The continued fraction expansion used is: 465 466 erfc(x) = x*exp(-x*x)/sqrt(pi) * [1/(0.5 + x**2 -) 0.5/(2.5 + x**2 - ) 467 3.0/(4.5 + x**2 - ) 7.5/(6.5 + x**2 - ) ...] 468 469 after the first term, the general term has the form: 470 471 k*(k-0.5)/(2*k+0.5 + x**2 - ...). 472 473 This expansion converges fast for larger x, but convergence becomes 474 infinitely slow as x approaches 0.0. The (somewhat naive) continued 475 fraction evaluation algorithm used below also risks overflow for large x; 476 but for large x, erfc(x) == 0.0 to within machine precision. (For 477 example, erfc(30.0) is approximately 2.56e-393). 478 479 Parameters: use series expansion for abs(x) < ERF_SERIES_CUTOFF and 480 continued fraction expansion for ERF_SERIES_CUTOFF <= abs(x) < 481 ERFC_CONTFRAC_CUTOFF. ERFC_SERIES_TERMS and ERFC_CONTFRAC_TERMS are the 482 numbers of terms to use for the relevant expansions. */ 483 484#define ERF_SERIES_CUTOFF 1.5 485#define ERF_SERIES_TERMS 25 486#define ERFC_CONTFRAC_CUTOFF 30.0 487#define ERFC_CONTFRAC_TERMS 50 488 489/* 490 Error function, via power series. 491 492 Given a finite float x, return an approximation to erf(x). 493 Converges reasonably fast for small x. 494*/ 495 496static double 497m_erf_series(double x) 498{ 499 double x2, acc, fk, result; 500 int i, saved_errno; 501 502 x2 = x * x; 503 acc = 0.0; 504 fk = (double)ERF_SERIES_TERMS + 0.5; 505 for (i = 0; i < ERF_SERIES_TERMS; i++) { 506 acc = 2.0 + x2 * acc / fk; 507 fk -= 1.0; 508 } 509 /* Make sure the exp call doesn't affect errno; 510 see m_erfc_contfrac for more. */ 511 saved_errno = errno; 512 result = acc * x * exp(-x2) / sqrtpi; 513 errno = saved_errno; 514 return result; 515} 516 517/* 518 Complementary error function, via continued fraction expansion. 519 520 Given a positive float x, return an approximation to erfc(x). Converges 521 reasonably fast for x large (say, x > 2.0), and should be safe from 522 overflow if x and nterms are not too large. On an IEEE 754 machine, with x 523 <= 30.0, we're safe up to nterms = 100. For x >= 30.0, erfc(x) is smaller 524 than the smallest representable nonzero float. */ 525 526static double 527m_erfc_contfrac(double x) 528{ 529 double x2, a, da, p, p_last, q, q_last, b, result; 530 int i, saved_errno; 531 532 if (x >= ERFC_CONTFRAC_CUTOFF) 533 return 0.0; 534 535 x2 = x*x; 536 a = 0.0; 537 da = 0.5; 538 p = 1.0; p_last = 0.0; 539 q = da + x2; q_last = 1.0; 540 for (i = 0; i < ERFC_CONTFRAC_TERMS; i++) { 541 double temp; 542 a += da; 543 da += 2.0; 544 b = da + x2; 545 temp = p; p = b*p - a*p_last; p_last = temp; 546 temp = q; q = b*q - a*q_last; q_last = temp; 547 } 548 /* Issue #8986: On some platforms, exp sets errno on underflow to zero; 549 save the current errno value so that we can restore it later. */ 550 saved_errno = errno; 551 result = p / q * x * exp(-x2) / sqrtpi; 552 errno = saved_errno; 553 return result; 554} 555 556#endif /* !defined(HAVE_ERF) || !defined(HAVE_ERFC) */ 557 558/* Error function erf(x), for general x */ 559 560static double 561m_erf(double x) 562{ 563#ifdef HAVE_ERF 564 return erf(x); 565#else 566 double absx, cf; 567 568 if (Py_IS_NAN(x)) 569 return x; 570 absx = fabs(x); 571 if (absx < ERF_SERIES_CUTOFF) 572 return m_erf_series(x); 573 else { 574 cf = m_erfc_contfrac(absx); 575 return x > 0.0 ? 1.0 - cf : cf - 1.0; 576 } 577#endif 578} 579 580/* Complementary error function erfc(x), for general x. */ 581 582static double 583m_erfc(double x) 584{ 585#ifdef HAVE_ERFC 586 return erfc(x); 587#else 588 double absx, cf; 589 590 if (Py_IS_NAN(x)) 591 return x; 592 absx = fabs(x); 593 if (absx < ERF_SERIES_CUTOFF) 594 return 1.0 - m_erf_series(x); 595 else { 596 cf = m_erfc_contfrac(absx); 597 return x > 0.0 ? cf : 2.0 - cf; 598 } 599#endif 600} 601 602/* 603 wrapper for atan2 that deals directly with special cases before 604 delegating to the platform libm for the remaining cases. This 605 is necessary to get consistent behaviour across platforms. 606 Windows, FreeBSD and alpha Tru64 are amongst platforms that don't 607 always follow C99. 608*/ 609 610static double 611m_atan2(double y, double x) 612{ 613 if (Py_IS_NAN(x) || Py_IS_NAN(y)) 614 return Py_NAN; 615 if (Py_IS_INFINITY(y)) { 616 if (Py_IS_INFINITY(x)) { 617 if (copysign(1., x) == 1.) 618 /* atan2(+-inf, +inf) == +-pi/4 */ 619 return copysign(0.25*Py_MATH_PI, y); 620 else 621 /* atan2(+-inf, -inf) == +-pi*3/4 */ 622 return copysign(0.75*Py_MATH_PI, y); 623 } 624 /* atan2(+-inf, x) == +-pi/2 for finite x */ 625 return copysign(0.5*Py_MATH_PI, y); 626 } 627 if (Py_IS_INFINITY(x) || y == 0.) { 628 if (copysign(1., x) == 1.) 629 /* atan2(+-y, +inf) = atan2(+-0, +x) = +-0. */ 630 return copysign(0., y); 631 else 632 /* atan2(+-y, -inf) = atan2(+-0., -x) = +-pi. */ 633 return copysign(Py_MATH_PI, y); 634 } 635 return atan2(y, x); 636} 637 638 639/* IEEE 754-style remainder operation: x - n*y where n*y is the nearest 640 multiple of y to x, taking n even in the case of a tie. Assuming an IEEE 754 641 binary floating-point format, the result is always exact. */ 642 643static double 644m_remainder(double x, double y) 645{ 646 /* Deal with most common case first. */ 647 if (Py_IS_FINITE(x) && Py_IS_FINITE(y)) { 648 double absx, absy, c, m, r; 649 650 if (y == 0.0) { 651 return Py_NAN; 652 } 653 654 absx = fabs(x); 655 absy = fabs(y); 656 m = fmod(absx, absy); 657 658 /* 659 Warning: some subtlety here. What we *want* to know at this point is 660 whether the remainder m is less than, equal to, or greater than half 661 of absy. However, we can't do that comparison directly because we 662 can't be sure that 0.5*absy is representable (the multiplication 663 might incur precision loss due to underflow). So instead we compare 664 m with the complement c = absy - m: m < 0.5*absy if and only if m < 665 c, and so on. The catch is that absy - m might also not be 666 representable, but it turns out that it doesn't matter: 667 668 - if m > 0.5*absy then absy - m is exactly representable, by 669 Sterbenz's lemma, so m > c 670 - if m == 0.5*absy then again absy - m is exactly representable 671 and m == c 672 - if m < 0.5*absy then either (i) 0.5*absy is exactly representable, 673 in which case 0.5*absy < absy - m, so 0.5*absy <= c and hence m < 674 c, or (ii) absy is tiny, either subnormal or in the lowest normal 675 binade. Then absy - m is exactly representable and again m < c. 676 */ 677 678 c = absy - m; 679 if (m < c) { 680 r = m; 681 } 682 else if (m > c) { 683 r = -c; 684 } 685 else { 686 /* 687 Here absx is exactly halfway between two multiples of absy, 688 and we need to choose the even multiple. x now has the form 689 690 absx = n * absy + m 691 692 for some integer n (recalling that m = 0.5*absy at this point). 693 If n is even we want to return m; if n is odd, we need to 694 return -m. 695 696 So 697 698 0.5 * (absx - m) = (n/2) * absy 699 700 and now reducing modulo absy gives us: 701 702 | m, if n is odd 703 fmod(0.5 * (absx - m), absy) = | 704 | 0, if n is even 705 706 Now m - 2.0 * fmod(...) gives the desired result: m 707 if n is even, -m if m is odd. 708 709 Note that all steps in fmod(0.5 * (absx - m), absy) 710 will be computed exactly, with no rounding error 711 introduced. 712 */ 713 assert(m == c); 714 r = m - 2.0 * fmod(0.5 * (absx - m), absy); 715 } 716 return copysign(1.0, x) * r; 717 } 718 719 /* Special values. */ 720 if (Py_IS_NAN(x)) { 721 return x; 722 } 723 if (Py_IS_NAN(y)) { 724 return y; 725 } 726 if (Py_IS_INFINITY(x)) { 727 return Py_NAN; 728 } 729 assert(Py_IS_INFINITY(y)); 730 return x; 731} 732 733 734/* 735 Various platforms (Solaris, OpenBSD) do nonstandard things for log(0), 736 log(-ve), log(NaN). Here are wrappers for log and log10 that deal with 737 special values directly, passing positive non-special values through to 738 the system log/log10. 739 */ 740 741static double 742m_log(double x) 743{ 744 if (Py_IS_FINITE(x)) { 745 if (x > 0.0) 746 return log(x); 747 errno = EDOM; 748 if (x == 0.0) 749 return -Py_HUGE_VAL; /* log(0) = -inf */ 750 else 751 return Py_NAN; /* log(-ve) = nan */ 752 } 753 else if (Py_IS_NAN(x)) 754 return x; /* log(nan) = nan */ 755 else if (x > 0.0) 756 return x; /* log(inf) = inf */ 757 else { 758 errno = EDOM; 759 return Py_NAN; /* log(-inf) = nan */ 760 } 761} 762 763/* 764 log2: log to base 2. 765 766 Uses an algorithm that should: 767 768 (a) produce exact results for powers of 2, and 769 (b) give a monotonic log2 (for positive finite floats), 770 assuming that the system log is monotonic. 771*/ 772 773static double 774m_log2(double x) 775{ 776 if (!Py_IS_FINITE(x)) { 777 if (Py_IS_NAN(x)) 778 return x; /* log2(nan) = nan */ 779 else if (x > 0.0) 780 return x; /* log2(+inf) = +inf */ 781 else { 782 errno = EDOM; 783 return Py_NAN; /* log2(-inf) = nan, invalid-operation */ 784 } 785 } 786 787 if (x > 0.0) { 788#ifdef HAVE_LOG2 789 return log2(x); 790#else 791 double m; 792 int e; 793 m = frexp(x, &e); 794 /* We want log2(m * 2**e) == log(m) / log(2) + e. Care is needed when 795 * x is just greater than 1.0: in that case e is 1, log(m) is negative, 796 * and we get significant cancellation error from the addition of 797 * log(m) / log(2) to e. The slight rewrite of the expression below 798 * avoids this problem. 799 */ 800 if (x >= 1.0) { 801 return log(2.0 * m) / log(2.0) + (e - 1); 802 } 803 else { 804 return log(m) / log(2.0) + e; 805 } 806#endif 807 } 808 else if (x == 0.0) { 809 errno = EDOM; 810 return -Py_HUGE_VAL; /* log2(0) = -inf, divide-by-zero */ 811 } 812 else { 813 errno = EDOM; 814 return Py_NAN; /* log2(-inf) = nan, invalid-operation */ 815 } 816} 817 818static double 819m_log10(double x) 820{ 821 if (Py_IS_FINITE(x)) { 822 if (x > 0.0) 823 return log10(x); 824 errno = EDOM; 825 if (x == 0.0) 826 return -Py_HUGE_VAL; /* log10(0) = -inf */ 827 else 828 return Py_NAN; /* log10(-ve) = nan */ 829 } 830 else if (Py_IS_NAN(x)) 831 return x; /* log10(nan) = nan */ 832 else if (x > 0.0) 833 return x; /* log10(inf) = inf */ 834 else { 835 errno = EDOM; 836 return Py_NAN; /* log10(-inf) = nan */ 837 } 838} 839 840 841static PyObject * 842math_gcd(PyObject *module, PyObject * const *args, Py_ssize_t nargs) 843{ 844 PyObject *res, *x; 845 Py_ssize_t i; 846 847 if (nargs == 0) { 848 return PyLong_FromLong(0); 849 } 850 res = PyNumber_Index(args[0]); 851 if (res == NULL) { 852 return NULL; 853 } 854 if (nargs == 1) { 855 Py_SETREF(res, PyNumber_Absolute(res)); 856 return res; 857 } 858 859 PyObject *one = _PyLong_GetOne(); // borrowed ref 860 for (i = 1; i < nargs; i++) { 861 x = _PyNumber_Index(args[i]); 862 if (x == NULL) { 863 Py_DECREF(res); 864 return NULL; 865 } 866 if (res == one) { 867 /* Fast path: just check arguments. 868 It is okay to use identity comparison here. */ 869 Py_DECREF(x); 870 continue; 871 } 872 Py_SETREF(res, _PyLong_GCD(res, x)); 873 Py_DECREF(x); 874 if (res == NULL) { 875 return NULL; 876 } 877 } 878 return res; 879} 880 881PyDoc_STRVAR(math_gcd_doc, 882"gcd($module, *integers)\n" 883"--\n" 884"\n" 885"Greatest Common Divisor."); 886 887 888static PyObject * 889long_lcm(PyObject *a, PyObject *b) 890{ 891 PyObject *g, *m, *f, *ab; 892 893 if (Py_SIZE(a) == 0 || Py_SIZE(b) == 0) { 894 return PyLong_FromLong(0); 895 } 896 g = _PyLong_GCD(a, b); 897 if (g == NULL) { 898 return NULL; 899 } 900 f = PyNumber_FloorDivide(a, g); 901 Py_DECREF(g); 902 if (f == NULL) { 903 return NULL; 904 } 905 m = PyNumber_Multiply(f, b); 906 Py_DECREF(f); 907 if (m == NULL) { 908 return NULL; 909 } 910 ab = PyNumber_Absolute(m); 911 Py_DECREF(m); 912 return ab; 913} 914 915 916static PyObject * 917math_lcm(PyObject *module, PyObject * const *args, Py_ssize_t nargs) 918{ 919 PyObject *res, *x; 920 Py_ssize_t i; 921 922 if (nargs == 0) { 923 return PyLong_FromLong(1); 924 } 925 res = PyNumber_Index(args[0]); 926 if (res == NULL) { 927 return NULL; 928 } 929 if (nargs == 1) { 930 Py_SETREF(res, PyNumber_Absolute(res)); 931 return res; 932 } 933 934 PyObject *zero = _PyLong_GetZero(); // borrowed ref 935 for (i = 1; i < nargs; i++) { 936 x = PyNumber_Index(args[i]); 937 if (x == NULL) { 938 Py_DECREF(res); 939 return NULL; 940 } 941 if (res == zero) { 942 /* Fast path: just check arguments. 943 It is okay to use identity comparison here. */ 944 Py_DECREF(x); 945 continue; 946 } 947 Py_SETREF(res, long_lcm(res, x)); 948 Py_DECREF(x); 949 if (res == NULL) { 950 return NULL; 951 } 952 } 953 return res; 954} 955 956 957PyDoc_STRVAR(math_lcm_doc, 958"lcm($module, *integers)\n" 959"--\n" 960"\n" 961"Least Common Multiple."); 962 963 964/* Call is_error when errno != 0, and where x is the result libm 965 * returned. is_error will usually set up an exception and return 966 * true (1), but may return false (0) without setting up an exception. 967 */ 968static int 969is_error(double x) 970{ 971 int result = 1; /* presumption of guilt */ 972 assert(errno); /* non-zero errno is a precondition for calling */ 973 if (errno == EDOM) 974 PyErr_SetString(PyExc_ValueError, "math domain error"); 975 976 else if (errno == ERANGE) { 977 /* ANSI C generally requires libm functions to set ERANGE 978 * on overflow, but also generally *allows* them to set 979 * ERANGE on underflow too. There's no consistency about 980 * the latter across platforms. 981 * Alas, C99 never requires that errno be set. 982 * Here we suppress the underflow errors (libm functions 983 * should return a zero on underflow, and +- HUGE_VAL on 984 * overflow, so testing the result for zero suffices to 985 * distinguish the cases). 986 * 987 * On some platforms (Ubuntu/ia64) it seems that errno can be 988 * set to ERANGE for subnormal results that do *not* underflow 989 * to zero. So to be safe, we'll ignore ERANGE whenever the 990 * function result is less than 1.5 in absolute value. 991 * 992 * bpo-46018: Changed to 1.5 to ensure underflows in expm1() 993 * are correctly detected, since the function may underflow 994 * toward -1.0 rather than 0.0. 995 */ 996 if (fabs(x) < 1.5) 997 result = 0; 998 else 999 PyErr_SetString(PyExc_OverflowError, 1000 "math range error"); 1001 } 1002 else 1003 /* Unexpected math error */ 1004 PyErr_SetFromErrno(PyExc_ValueError); 1005 return result; 1006} 1007 1008/* 1009 math_1 is used to wrap a libm function f that takes a double 1010 argument and returns a double. 1011 1012 The error reporting follows these rules, which are designed to do 1013 the right thing on C89/C99 platforms and IEEE 754/non IEEE 754 1014 platforms. 1015 1016 - a NaN result from non-NaN inputs causes ValueError to be raised 1017 - an infinite result from finite inputs causes OverflowError to be 1018 raised if can_overflow is 1, or raises ValueError if can_overflow 1019 is 0. 1020 - if the result is finite and errno == EDOM then ValueError is 1021 raised 1022 - if the result is finite and nonzero and errno == ERANGE then 1023 OverflowError is raised 1024 1025 The last rule is used to catch overflow on platforms which follow 1026 C89 but for which HUGE_VAL is not an infinity. 1027 1028 For the majority of one-argument functions these rules are enough 1029 to ensure that Python's functions behave as specified in 'Annex F' 1030 of the C99 standard, with the 'invalid' and 'divide-by-zero' 1031 floating-point exceptions mapping to Python's ValueError and the 1032 'overflow' floating-point exception mapping to OverflowError. 1033 math_1 only works for functions that don't have singularities *and* 1034 the possibility of overflow; fortunately, that covers everything we 1035 care about right now. 1036*/ 1037 1038static PyObject * 1039math_1_to_whatever(PyObject *arg, double (*func) (double), 1040 PyObject *(*from_double_func) (double), 1041 int can_overflow) 1042{ 1043 double x, r; 1044 x = PyFloat_AsDouble(arg); 1045 if (x == -1.0 && PyErr_Occurred()) 1046 return NULL; 1047 errno = 0; 1048 r = (*func)(x); 1049 if (Py_IS_NAN(r) && !Py_IS_NAN(x)) { 1050 PyErr_SetString(PyExc_ValueError, 1051 "math domain error"); /* invalid arg */ 1052 return NULL; 1053 } 1054 if (Py_IS_INFINITY(r) && Py_IS_FINITE(x)) { 1055 if (can_overflow) 1056 PyErr_SetString(PyExc_OverflowError, 1057 "math range error"); /* overflow */ 1058 else 1059 PyErr_SetString(PyExc_ValueError, 1060 "math domain error"); /* singularity */ 1061 return NULL; 1062 } 1063 if (Py_IS_FINITE(r) && errno && is_error(r)) 1064 /* this branch unnecessary on most platforms */ 1065 return NULL; 1066 1067 return (*from_double_func)(r); 1068} 1069 1070/* variant of math_1, to be used when the function being wrapped is known to 1071 set errno properly (that is, errno = EDOM for invalid or divide-by-zero, 1072 errno = ERANGE for overflow). */ 1073 1074static PyObject * 1075math_1a(PyObject *arg, double (*func) (double)) 1076{ 1077 double x, r; 1078 x = PyFloat_AsDouble(arg); 1079 if (x == -1.0 && PyErr_Occurred()) 1080 return NULL; 1081 errno = 0; 1082 r = (*func)(x); 1083 if (errno && is_error(r)) 1084 return NULL; 1085 return PyFloat_FromDouble(r); 1086} 1087 1088/* 1089 math_2 is used to wrap a libm function f that takes two double 1090 arguments and returns a double. 1091 1092 The error reporting follows these rules, which are designed to do 1093 the right thing on C89/C99 platforms and IEEE 754/non IEEE 754 1094 platforms. 1095 1096 - a NaN result from non-NaN inputs causes ValueError to be raised 1097 - an infinite result from finite inputs causes OverflowError to be 1098 raised. 1099 - if the result is finite and errno == EDOM then ValueError is 1100 raised 1101 - if the result is finite and nonzero and errno == ERANGE then 1102 OverflowError is raised 1103 1104 The last rule is used to catch overflow on platforms which follow 1105 C89 but for which HUGE_VAL is not an infinity. 1106 1107 For most two-argument functions (copysign, fmod, hypot, atan2) 1108 these rules are enough to ensure that Python's functions behave as 1109 specified in 'Annex F' of the C99 standard, with the 'invalid' and 1110 'divide-by-zero' floating-point exceptions mapping to Python's 1111 ValueError and the 'overflow' floating-point exception mapping to 1112 OverflowError. 1113*/ 1114 1115static PyObject * 1116math_1(PyObject *arg, double (*func) (double), int can_overflow) 1117{ 1118 return math_1_to_whatever(arg, func, PyFloat_FromDouble, can_overflow); 1119} 1120 1121static PyObject * 1122math_2(PyObject *const *args, Py_ssize_t nargs, 1123 double (*func) (double, double), const char *funcname) 1124{ 1125 double x, y, r; 1126 if (!_PyArg_CheckPositional(funcname, nargs, 2, 2)) 1127 return NULL; 1128 x = PyFloat_AsDouble(args[0]); 1129 if (x == -1.0 && PyErr_Occurred()) { 1130 return NULL; 1131 } 1132 y = PyFloat_AsDouble(args[1]); 1133 if (y == -1.0 && PyErr_Occurred()) { 1134 return NULL; 1135 } 1136 errno = 0; 1137 r = (*func)(x, y); 1138 if (Py_IS_NAN(r)) { 1139 if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) 1140 errno = EDOM; 1141 else 1142 errno = 0; 1143 } 1144 else if (Py_IS_INFINITY(r)) { 1145 if (Py_IS_FINITE(x) && Py_IS_FINITE(y)) 1146 errno = ERANGE; 1147 else 1148 errno = 0; 1149 } 1150 if (errno && is_error(r)) 1151 return NULL; 1152 else 1153 return PyFloat_FromDouble(r); 1154} 1155 1156#define FUNC1(funcname, func, can_overflow, docstring) \ 1157 static PyObject * math_##funcname(PyObject *self, PyObject *args) { \ 1158 return math_1(args, func, can_overflow); \ 1159 }\ 1160 PyDoc_STRVAR(math_##funcname##_doc, docstring); 1161 1162#define FUNC1A(funcname, func, docstring) \ 1163 static PyObject * math_##funcname(PyObject *self, PyObject *args) { \ 1164 return math_1a(args, func); \ 1165 }\ 1166 PyDoc_STRVAR(math_##funcname##_doc, docstring); 1167 1168#define FUNC2(funcname, func, docstring) \ 1169 static PyObject * math_##funcname(PyObject *self, PyObject *const *args, Py_ssize_t nargs) { \ 1170 return math_2(args, nargs, func, #funcname); \ 1171 }\ 1172 PyDoc_STRVAR(math_##funcname##_doc, docstring); 1173 1174FUNC1(acos, acos, 0, 1175 "acos($module, x, /)\n--\n\n" 1176 "Return the arc cosine (measured in radians) of x.\n\n" 1177 "The result is between 0 and pi.") 1178FUNC1(acosh, acosh, 0, 1179 "acosh($module, x, /)\n--\n\n" 1180 "Return the inverse hyperbolic cosine of x.") 1181FUNC1(asin, asin, 0, 1182 "asin($module, x, /)\n--\n\n" 1183 "Return the arc sine (measured in radians) of x.\n\n" 1184 "The result is between -pi/2 and pi/2.") 1185FUNC1(asinh, asinh, 0, 1186 "asinh($module, x, /)\n--\n\n" 1187 "Return the inverse hyperbolic sine of x.") 1188FUNC1(atan, atan, 0, 1189 "atan($module, x, /)\n--\n\n" 1190 "Return the arc tangent (measured in radians) of x.\n\n" 1191 "The result is between -pi/2 and pi/2.") 1192FUNC2(atan2, m_atan2, 1193 "atan2($module, y, x, /)\n--\n\n" 1194 "Return the arc tangent (measured in radians) of y/x.\n\n" 1195 "Unlike atan(y/x), the signs of both x and y are considered.") 1196FUNC1(atanh, atanh, 0, 1197 "atanh($module, x, /)\n--\n\n" 1198 "Return the inverse hyperbolic tangent of x.") 1199FUNC1(cbrt, cbrt, 0, 1200 "cbrt($module, x, /)\n--\n\n" 1201 "Return the cube root of x.") 1202 1203/*[clinic input] 1204math.ceil 1205 1206 x as number: object 1207 / 1208 1209Return the ceiling of x as an Integral. 1210 1211This is the smallest integer >= x. 1212[clinic start generated code]*/ 1213 1214static PyObject * 1215math_ceil(PyObject *module, PyObject *number) 1216/*[clinic end generated code: output=6c3b8a78bc201c67 input=2725352806399cab]*/ 1217{ 1218 _Py_IDENTIFIER(__ceil__); 1219 1220 if (!PyFloat_CheckExact(number)) { 1221 PyObject *method = _PyObject_LookupSpecialId(number, &PyId___ceil__); 1222 if (method != NULL) { 1223 PyObject *result = _PyObject_CallNoArgs(method); 1224 Py_DECREF(method); 1225 return result; 1226 } 1227 if (PyErr_Occurred()) 1228 return NULL; 1229 } 1230 double x = PyFloat_AsDouble(number); 1231 if (x == -1.0 && PyErr_Occurred()) 1232 return NULL; 1233 1234 return PyLong_FromDouble(ceil(x)); 1235} 1236 1237FUNC2(copysign, copysign, 1238 "copysign($module, x, y, /)\n--\n\n" 1239 "Return a float with the magnitude (absolute value) of x but the sign of y.\n\n" 1240 "On platforms that support signed zeros, copysign(1.0, -0.0)\n" 1241 "returns -1.0.\n") 1242FUNC1(cos, cos, 0, 1243 "cos($module, x, /)\n--\n\n" 1244 "Return the cosine of x (measured in radians).") 1245FUNC1(cosh, cosh, 1, 1246 "cosh($module, x, /)\n--\n\n" 1247 "Return the hyperbolic cosine of x.") 1248FUNC1A(erf, m_erf, 1249 "erf($module, x, /)\n--\n\n" 1250 "Error function at x.") 1251FUNC1A(erfc, m_erfc, 1252 "erfc($module, x, /)\n--\n\n" 1253 "Complementary error function at x.") 1254FUNC1(exp, exp, 1, 1255 "exp($module, x, /)\n--\n\n" 1256 "Return e raised to the power of x.") 1257FUNC1(exp2, exp2, 1, 1258 "exp2($module, x, /)\n--\n\n" 1259 "Return 2 raised to the power of x.") 1260FUNC1(expm1, expm1, 1, 1261 "expm1($module, x, /)\n--\n\n" 1262 "Return exp(x)-1.\n\n" 1263 "This function avoids the loss of precision involved in the direct " 1264 "evaluation of exp(x)-1 for small x.") 1265FUNC1(fabs, fabs, 0, 1266 "fabs($module, x, /)\n--\n\n" 1267 "Return the absolute value of the float x.") 1268 1269/*[clinic input] 1270math.floor 1271 1272 x as number: object 1273 / 1274 1275Return the floor of x as an Integral. 1276 1277This is the largest integer <= x. 1278[clinic start generated code]*/ 1279 1280static PyObject * 1281math_floor(PyObject *module, PyObject *number) 1282/*[clinic end generated code: output=c6a65c4884884b8a input=63af6b5d7ebcc3d6]*/ 1283{ 1284 double x; 1285 1286 _Py_IDENTIFIER(__floor__); 1287 1288 if (PyFloat_CheckExact(number)) { 1289 x = PyFloat_AS_DOUBLE(number); 1290 } 1291 else 1292 { 1293 PyObject *method = _PyObject_LookupSpecialId(number, &PyId___floor__); 1294 if (method != NULL) { 1295 PyObject *result = _PyObject_CallNoArgs(method); 1296 Py_DECREF(method); 1297 return result; 1298 } 1299 if (PyErr_Occurred()) 1300 return NULL; 1301 x = PyFloat_AsDouble(number); 1302 if (x == -1.0 && PyErr_Occurred()) 1303 return NULL; 1304 } 1305 return PyLong_FromDouble(floor(x)); 1306} 1307 1308FUNC1A(gamma, m_tgamma, 1309 "gamma($module, x, /)\n--\n\n" 1310 "Gamma function at x.") 1311FUNC1A(lgamma, m_lgamma, 1312 "lgamma($module, x, /)\n--\n\n" 1313 "Natural logarithm of absolute value of Gamma function at x.") 1314FUNC1(log1p, m_log1p, 0, 1315 "log1p($module, x, /)\n--\n\n" 1316 "Return the natural logarithm of 1+x (base e).\n\n" 1317 "The result is computed in a way which is accurate for x near zero.") 1318FUNC2(remainder, m_remainder, 1319 "remainder($module, x, y, /)\n--\n\n" 1320 "Difference between x and the closest integer multiple of y.\n\n" 1321 "Return x - n*y where n*y is the closest integer multiple of y.\n" 1322 "In the case where x is exactly halfway between two multiples of\n" 1323 "y, the nearest even value of n is used. The result is always exact.") 1324FUNC1(sin, sin, 0, 1325 "sin($module, x, /)\n--\n\n" 1326 "Return the sine of x (measured in radians).") 1327FUNC1(sinh, sinh, 1, 1328 "sinh($module, x, /)\n--\n\n" 1329 "Return the hyperbolic sine of x.") 1330FUNC1(sqrt, sqrt, 0, 1331 "sqrt($module, x, /)\n--\n\n" 1332 "Return the square root of x.") 1333FUNC1(tan, tan, 0, 1334 "tan($module, x, /)\n--\n\n" 1335 "Return the tangent of x (measured in radians).") 1336FUNC1(tanh, tanh, 0, 1337 "tanh($module, x, /)\n--\n\n" 1338 "Return the hyperbolic tangent of x.") 1339 1340/* Precision summation function as msum() by Raymond Hettinger in 1341 <http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/393090>, 1342 enhanced with the exact partials sum and roundoff from Mark 1343 Dickinson's post at <http://bugs.python.org/file10357/msum4.py>. 1344 See those links for more details, proofs and other references. 1345 1346 Note 1: IEEE 754R floating point semantics are assumed, 1347 but the current implementation does not re-establish special 1348 value semantics across iterations (i.e. handling -Inf + Inf). 1349 1350 Note 2: No provision is made for intermediate overflow handling; 1351 therefore, sum([1e+308, 1e-308, 1e+308]) returns 1e+308 while 1352 sum([1e+308, 1e+308, 1e-308]) raises an OverflowError due to the 1353 overflow of the first partial sum. 1354 1355 Note 3: The intermediate values lo, yr, and hi are declared volatile so 1356 aggressive compilers won't algebraically reduce lo to always be exactly 0.0. 1357 Also, the volatile declaration forces the values to be stored in memory as 1358 regular doubles instead of extended long precision (80-bit) values. This 1359 prevents double rounding because any addition or subtraction of two doubles 1360 can be resolved exactly into double-sized hi and lo values. As long as the 1361 hi value gets forced into a double before yr and lo are computed, the extra 1362 bits in downstream extended precision operations (x87 for example) will be 1363 exactly zero and therefore can be losslessly stored back into a double, 1364 thereby preventing double rounding. 1365 1366 Note 4: A similar implementation is in Modules/cmathmodule.c. 1367 Be sure to update both when making changes. 1368 1369 Note 5: The signature of math.fsum() differs from builtins.sum() 1370 because the start argument doesn't make sense in the context of 1371 accurate summation. Since the partials table is collapsed before 1372 returning a result, sum(seq2, start=sum(seq1)) may not equal the 1373 accurate result returned by sum(itertools.chain(seq1, seq2)). 1374*/ 1375 1376#define NUM_PARTIALS 32 /* initial partials array size, on stack */ 1377 1378/* Extend the partials array p[] by doubling its size. */ 1379static int /* non-zero on error */ 1380_fsum_realloc(double **p_ptr, Py_ssize_t n, 1381 double *ps, Py_ssize_t *m_ptr) 1382{ 1383 void *v = NULL; 1384 Py_ssize_t m = *m_ptr; 1385 1386 m += m; /* double */ 1387 if (n < m && (size_t)m < ((size_t)PY_SSIZE_T_MAX / sizeof(double))) { 1388 double *p = *p_ptr; 1389 if (p == ps) { 1390 v = PyMem_Malloc(sizeof(double) * m); 1391 if (v != NULL) 1392 memcpy(v, ps, sizeof(double) * n); 1393 } 1394 else 1395 v = PyMem_Realloc(p, sizeof(double) * m); 1396 } 1397 if (v == NULL) { /* size overflow or no memory */ 1398 PyErr_SetString(PyExc_MemoryError, "math.fsum partials"); 1399 return 1; 1400 } 1401 *p_ptr = (double*) v; 1402 *m_ptr = m; 1403 return 0; 1404} 1405 1406/* Full precision summation of a sequence of floats. 1407 1408 def msum(iterable): 1409 partials = [] # sorted, non-overlapping partial sums 1410 for x in iterable: 1411 i = 0 1412 for y in partials: 1413 if abs(x) < abs(y): 1414 x, y = y, x 1415 hi = x + y 1416 lo = y - (hi - x) 1417 if lo: 1418 partials[i] = lo 1419 i += 1 1420 x = hi 1421 partials[i:] = [x] 1422 return sum_exact(partials) 1423 1424 Rounded x+y stored in hi with the roundoff stored in lo. Together hi+lo 1425 are exactly equal to x+y. The inner loop applies hi/lo summation to each 1426 partial so that the list of partial sums remains exact. 1427 1428 Sum_exact() adds the partial sums exactly and correctly rounds the final 1429 result (using the round-half-to-even rule). The items in partials remain 1430 non-zero, non-special, non-overlapping and strictly increasing in 1431 magnitude, but possibly not all having the same sign. 1432 1433 Depends on IEEE 754 arithmetic guarantees and half-even rounding. 1434*/ 1435 1436/*[clinic input] 1437math.fsum 1438 1439 seq: object 1440 / 1441 1442Return an accurate floating point sum of values in the iterable seq. 1443 1444Assumes IEEE-754 floating point arithmetic. 1445[clinic start generated code]*/ 1446 1447static PyObject * 1448math_fsum(PyObject *module, PyObject *seq) 1449/*[clinic end generated code: output=ba5c672b87fe34fc input=c51b7d8caf6f6e82]*/ 1450{ 1451 PyObject *item, *iter, *sum = NULL; 1452 Py_ssize_t i, j, n = 0, m = NUM_PARTIALS; 1453 double x, y, t, ps[NUM_PARTIALS], *p = ps; 1454 double xsave, special_sum = 0.0, inf_sum = 0.0; 1455 volatile double hi, yr, lo; 1456 1457 iter = PyObject_GetIter(seq); 1458 if (iter == NULL) 1459 return NULL; 1460 1461 for(;;) { /* for x in iterable */ 1462 assert(0 <= n && n <= m); 1463 assert((m == NUM_PARTIALS && p == ps) || 1464 (m > NUM_PARTIALS && p != NULL)); 1465 1466 item = PyIter_Next(iter); 1467 if (item == NULL) { 1468 if (PyErr_Occurred()) 1469 goto _fsum_error; 1470 break; 1471 } 1472 ASSIGN_DOUBLE(x, item, error_with_item); 1473 Py_DECREF(item); 1474 1475 xsave = x; 1476 for (i = j = 0; j < n; j++) { /* for y in partials */ 1477 y = p[j]; 1478 if (fabs(x) < fabs(y)) { 1479 t = x; x = y; y = t; 1480 } 1481 hi = x + y; 1482 yr = hi - x; 1483 lo = y - yr; 1484 if (lo != 0.0) 1485 p[i++] = lo; 1486 x = hi; 1487 } 1488 1489 n = i; /* ps[i:] = [x] */ 1490 if (x != 0.0) { 1491 if (! Py_IS_FINITE(x)) { 1492 /* a nonfinite x could arise either as 1493 a result of intermediate overflow, or 1494 as a result of a nan or inf in the 1495 summands */ 1496 if (Py_IS_FINITE(xsave)) { 1497 PyErr_SetString(PyExc_OverflowError, 1498 "intermediate overflow in fsum"); 1499 goto _fsum_error; 1500 } 1501 if (Py_IS_INFINITY(xsave)) 1502 inf_sum += xsave; 1503 special_sum += xsave; 1504 /* reset partials */ 1505 n = 0; 1506 } 1507 else if (n >= m && _fsum_realloc(&p, n, ps, &m)) 1508 goto _fsum_error; 1509 else 1510 p[n++] = x; 1511 } 1512 } 1513 1514 if (special_sum != 0.0) { 1515 if (Py_IS_NAN(inf_sum)) 1516 PyErr_SetString(PyExc_ValueError, 1517 "-inf + inf in fsum"); 1518 else 1519 sum = PyFloat_FromDouble(special_sum); 1520 goto _fsum_error; 1521 } 1522 1523 hi = 0.0; 1524 if (n > 0) { 1525 hi = p[--n]; 1526 /* sum_exact(ps, hi) from the top, stop when the sum becomes 1527 inexact. */ 1528 while (n > 0) { 1529 x = hi; 1530 y = p[--n]; 1531 assert(fabs(y) < fabs(x)); 1532 hi = x + y; 1533 yr = hi - x; 1534 lo = y - yr; 1535 if (lo != 0.0) 1536 break; 1537 } 1538 /* Make half-even rounding work across multiple partials. 1539 Needed so that sum([1e-16, 1, 1e16]) will round-up the last 1540 digit to two instead of down to zero (the 1e-16 makes the 1 1541 slightly closer to two). With a potential 1 ULP rounding 1542 error fixed-up, math.fsum() can guarantee commutativity. */ 1543 if (n > 0 && ((lo < 0.0 && p[n-1] < 0.0) || 1544 (lo > 0.0 && p[n-1] > 0.0))) { 1545 y = lo * 2.0; 1546 x = hi + y; 1547 yr = x - hi; 1548 if (y == yr) 1549 hi = x; 1550 } 1551 } 1552 sum = PyFloat_FromDouble(hi); 1553 1554 _fsum_error: 1555 Py_DECREF(iter); 1556 if (p != ps) 1557 PyMem_Free(p); 1558 return sum; 1559 1560 error_with_item: 1561 Py_DECREF(item); 1562 goto _fsum_error; 1563} 1564 1565#undef NUM_PARTIALS 1566 1567 1568static unsigned long 1569count_set_bits(unsigned long n) 1570{ 1571 unsigned long count = 0; 1572 while (n != 0) { 1573 ++count; 1574 n &= n - 1; /* clear least significant bit */ 1575 } 1576 return count; 1577} 1578 1579/* Integer square root 1580 1581Given a nonnegative integer `n`, we want to compute the largest integer 1582`a` for which `a * a <= n`, or equivalently the integer part of the exact 1583square root of `n`. 1584 1585We use an adaptive-precision pure-integer version of Newton's iteration. Given 1586a positive integer `n`, the algorithm produces at each iteration an integer 1587approximation `a` to the square root of `n >> s` for some even integer `s`, 1588with `s` decreasing as the iterations progress. On the final iteration, `s` is 1589zero and we have an approximation to the square root of `n` itself. 1590 1591At every step, the approximation `a` is strictly within 1.0 of the true square 1592root, so we have 1593 1594 (a - 1)**2 < (n >> s) < (a + 1)**2 1595 1596After the final iteration, a check-and-correct step is needed to determine 1597whether `a` or `a - 1` gives the desired integer square root of `n`. 1598 1599The algorithm is remarkable in its simplicity. There's no need for a 1600per-iteration check-and-correct step, and termination is straightforward: the 1601number of iterations is known in advance (it's exactly `floor(log2(log2(n)))` 1602for `n > 1`). The only tricky part of the correctness proof is in establishing 1603that the bound `(a - 1)**2 < (n >> s) < (a + 1)**2` is maintained from one 1604iteration to the next. A sketch of the proof of this is given below. 1605 1606In addition to the proof sketch, a formal, computer-verified proof 1607of correctness (using Lean) of an equivalent recursive algorithm can be found 1608here: 1609 1610 https://github.com/mdickinson/snippets/blob/master/proofs/isqrt/src/isqrt.lean 1611 1612 1613Here's Python code equivalent to the C implementation below: 1614 1615 def isqrt(n): 1616 """ 1617 Return the integer part of the square root of the input. 1618 """ 1619 n = operator.index(n) 1620 1621 if n < 0: 1622 raise ValueError("isqrt() argument must be nonnegative") 1623 if n == 0: 1624 return 0 1625 1626 c = (n.bit_length() - 1) // 2 1627 a = 1 1628 d = 0 1629 for s in reversed(range(c.bit_length())): 1630 # Loop invariant: (a-1)**2 < (n >> 2*(c - d)) < (a+1)**2 1631 e = d 1632 d = c >> s 1633 a = (a << d - e - 1) + (n >> 2*c - e - d + 1) // a 1634 1635 return a - (a*a > n) 1636 1637 1638Sketch of proof of correctness 1639------------------------------ 1640 1641The delicate part of the correctness proof is showing that the loop invariant 1642is preserved from one iteration to the next. That is, just before the line 1643 1644 a = (a << d - e - 1) + (n >> 2*c - e - d + 1) // a 1645 1646is executed in the above code, we know that 1647 1648 (1) (a - 1)**2 < (n >> 2*(c - e)) < (a + 1)**2. 1649 1650(since `e` is always the value of `d` from the previous iteration). We must 1651prove that after that line is executed, we have 1652 1653 (a - 1)**2 < (n >> 2*(c - d)) < (a + 1)**2 1654 1655To facilitate the proof, we make some changes of notation. Write `m` for 1656`n >> 2*(c-d)`, and write `b` for the new value of `a`, so 1657 1658 b = (a << d - e - 1) + (n >> 2*c - e - d + 1) // a 1659 1660or equivalently: 1661 1662 (2) b = (a << d - e - 1) + (m >> d - e + 1) // a 1663 1664Then we can rewrite (1) as: 1665 1666 (3) (a - 1)**2 < (m >> 2*(d - e)) < (a + 1)**2 1667 1668and we must show that (b - 1)**2 < m < (b + 1)**2. 1669 1670From this point on, we switch to mathematical notation, so `/` means exact 1671division rather than integer division and `^` is used for exponentiation. We 1672use the `√` symbol for the exact square root. In (3), we can remove the 1673implicit floor operation to give: 1674 1675 (4) (a - 1)^2 < m / 4^(d - e) < (a + 1)^2 1676 1677Taking square roots throughout (4), scaling by `2^(d-e)`, and rearranging gives 1678 1679 (5) 0 <= | 2^(d-e)a - √m | < 2^(d-e) 1680 1681Squaring and dividing through by `2^(d-e+1) a` gives 1682 1683 (6) 0 <= 2^(d-e-1) a + m / (2^(d-e+1) a) - √m < 2^(d-e-1) / a 1684 1685We'll show below that `2^(d-e-1) <= a`. Given that, we can replace the 1686right-hand side of (6) with `1`, and now replacing the central 1687term `m / (2^(d-e+1) a)` with its floor in (6) gives 1688 1689 (7) -1 < 2^(d-e-1) a + m // 2^(d-e+1) a - √m < 1 1690 1691Or equivalently, from (2): 1692 1693 (7) -1 < b - √m < 1 1694 1695and rearranging gives that `(b-1)^2 < m < (b+1)^2`, which is what we needed 1696to prove. 1697 1698We're not quite done: we still have to prove the inequality `2^(d - e - 1) <= 1699a` that was used to get line (7) above. From the definition of `c`, we have 1700`4^c <= n`, which implies 1701 1702 (8) 4^d <= m 1703 1704also, since `e == d >> 1`, `d` is at most `2e + 1`, from which it follows 1705that `2d - 2e - 1 <= d` and hence that 1706 1707 (9) 4^(2d - 2e - 1) <= m 1708 1709Dividing both sides by `4^(d - e)` gives 1710 1711 (10) 4^(d - e - 1) <= m / 4^(d - e) 1712 1713But we know from (4) that `m / 4^(d-e) < (a + 1)^2`, hence 1714 1715 (11) 4^(d - e - 1) < (a + 1)^2 1716 1717Now taking square roots of both sides and observing that both `2^(d-e-1)` and 1718`a` are integers gives `2^(d - e - 1) <= a`, which is what we needed. This 1719completes the proof sketch. 1720 1721*/ 1722 1723/* 1724 The _approximate_isqrt_tab table provides approximate square roots for 1725 16-bit integers. For any n in the range 2**14 <= n < 2**16, the value 1726 1727 a = _approximate_isqrt_tab[(n >> 8) - 64] 1728 1729 is an approximate square root of n, satisfying (a - 1)**2 < n < (a + 1)**2. 1730 1731 The table was computed in Python using the expression: 1732 1733 [min(round(sqrt(256*n + 128)), 255) for n in range(64, 256)] 1734*/ 1735 1736static const uint8_t _approximate_isqrt_tab[192] = { 1737 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 1738 140, 141, 142, 143, 144, 144, 145, 146, 147, 148, 149, 150, 1739 151, 151, 152, 153, 154, 155, 156, 156, 157, 158, 159, 160, 1740 160, 161, 162, 163, 164, 164, 165, 166, 167, 167, 168, 169, 1741 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, 1742 179, 179, 180, 181, 181, 182, 183, 183, 184, 185, 186, 186, 1743 187, 188, 188, 189, 190, 190, 191, 192, 192, 193, 194, 194, 1744 195, 196, 196, 197, 198, 198, 199, 200, 200, 201, 201, 202, 1745 203, 203, 204, 205, 205, 206, 206, 207, 208, 208, 209, 210, 1746 210, 211, 211, 212, 213, 213, 214, 214, 215, 216, 216, 217, 1747 217, 218, 219, 219, 220, 220, 221, 221, 222, 223, 223, 224, 1748 224, 225, 225, 226, 227, 227, 228, 228, 229, 229, 230, 230, 1749 231, 232, 232, 233, 233, 234, 234, 235, 235, 236, 237, 237, 1750 238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 1751 244, 244, 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, 1752 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, 255, 1753}; 1754 1755/* Approximate square root of a large 64-bit integer. 1756 1757 Given `n` satisfying `2**62 <= n < 2**64`, return `a` 1758 satisfying `(a - 1)**2 < n < (a + 1)**2`. */ 1759 1760static inline uint32_t 1761_approximate_isqrt(uint64_t n) 1762{ 1763 uint32_t u = _approximate_isqrt_tab[(n >> 56) - 64]; 1764 u = (u << 7) + (uint32_t)(n >> 41) / u; 1765 return (u << 15) + (uint32_t)((n >> 17) / u); 1766} 1767 1768/*[clinic input] 1769math.isqrt 1770 1771 n: object 1772 / 1773 1774Return the integer part of the square root of the input. 1775[clinic start generated code]*/ 1776 1777static PyObject * 1778math_isqrt(PyObject *module, PyObject *n) 1779/*[clinic end generated code: output=35a6f7f980beab26 input=5b6e7ae4fa6c43d6]*/ 1780{ 1781 int a_too_large, c_bit_length; 1782 size_t c, d; 1783 uint64_t m; 1784 uint32_t u; 1785 PyObject *a = NULL, *b; 1786 1787 n = _PyNumber_Index(n); 1788 if (n == NULL) { 1789 return NULL; 1790 } 1791 1792 if (_PyLong_Sign(n) < 0) { 1793 PyErr_SetString( 1794 PyExc_ValueError, 1795 "isqrt() argument must be nonnegative"); 1796 goto error; 1797 } 1798 if (_PyLong_Sign(n) == 0) { 1799 Py_DECREF(n); 1800 return PyLong_FromLong(0); 1801 } 1802 1803 /* c = (n.bit_length() - 1) // 2 */ 1804 c = _PyLong_NumBits(n); 1805 if (c == (size_t)(-1)) { 1806 goto error; 1807 } 1808 c = (c - 1U) / 2U; 1809 1810 /* Fast path: if c <= 31 then n < 2**64 and we can compute directly with a 1811 fast, almost branch-free algorithm. */ 1812 if (c <= 31U) { 1813 int shift = 31 - (int)c; 1814 m = (uint64_t)PyLong_AsUnsignedLongLong(n); 1815 Py_DECREF(n); 1816 if (m == (uint64_t)(-1) && PyErr_Occurred()) { 1817 return NULL; 1818 } 1819 u = _approximate_isqrt(m << 2*shift) >> shift; 1820 u -= (uint64_t)u * u > m; 1821 return PyLong_FromUnsignedLong(u); 1822 } 1823 1824 /* Slow path: n >= 2**64. We perform the first five iterations in C integer 1825 arithmetic, then switch to using Python long integers. */ 1826 1827 /* From n >= 2**64 it follows that c.bit_length() >= 6. */ 1828 c_bit_length = 6; 1829 while ((c >> c_bit_length) > 0U) { 1830 ++c_bit_length; 1831 } 1832 1833 /* Initialise d and a. */ 1834 d = c >> (c_bit_length - 5); 1835 b = _PyLong_Rshift(n, 2U*c - 62U); 1836 if (b == NULL) { 1837 goto error; 1838 } 1839 m = (uint64_t)PyLong_AsUnsignedLongLong(b); 1840 Py_DECREF(b); 1841 if (m == (uint64_t)(-1) && PyErr_Occurred()) { 1842 goto error; 1843 } 1844 u = _approximate_isqrt(m) >> (31U - d); 1845 a = PyLong_FromUnsignedLong(u); 1846 if (a == NULL) { 1847 goto error; 1848 } 1849 1850 for (int s = c_bit_length - 6; s >= 0; --s) { 1851 PyObject *q; 1852 size_t e = d; 1853 1854 d = c >> s; 1855 1856 /* q = (n >> 2*c - e - d + 1) // a */ 1857 q = _PyLong_Rshift(n, 2U*c - d - e + 1U); 1858 if (q == NULL) { 1859 goto error; 1860 } 1861 Py_SETREF(q, PyNumber_FloorDivide(q, a)); 1862 if (q == NULL) { 1863 goto error; 1864 } 1865 1866 /* a = (a << d - 1 - e) + q */ 1867 Py_SETREF(a, _PyLong_Lshift(a, d - 1U - e)); 1868 if (a == NULL) { 1869 Py_DECREF(q); 1870 goto error; 1871 } 1872 Py_SETREF(a, PyNumber_Add(a, q)); 1873 Py_DECREF(q); 1874 if (a == NULL) { 1875 goto error; 1876 } 1877 } 1878 1879 /* The correct result is either a or a - 1. Figure out which, and 1880 decrement a if necessary. */ 1881 1882 /* a_too_large = n < a * a */ 1883 b = PyNumber_Multiply(a, a); 1884 if (b == NULL) { 1885 goto error; 1886 } 1887 a_too_large = PyObject_RichCompareBool(n, b, Py_LT); 1888 Py_DECREF(b); 1889 if (a_too_large == -1) { 1890 goto error; 1891 } 1892 1893 if (a_too_large) { 1894 Py_SETREF(a, PyNumber_Subtract(a, _PyLong_GetOne())); 1895 } 1896 Py_DECREF(n); 1897 return a; 1898 1899 error: 1900 Py_XDECREF(a); 1901 Py_DECREF(n); 1902 return NULL; 1903} 1904 1905/* Divide-and-conquer factorial algorithm 1906 * 1907 * Based on the formula and pseudo-code provided at: 1908 * http://www.luschny.de/math/factorial/binarysplitfact.html 1909 * 1910 * Faster algorithms exist, but they're more complicated and depend on 1911 * a fast prime factorization algorithm. 1912 * 1913 * Notes on the algorithm 1914 * ---------------------- 1915 * 1916 * factorial(n) is written in the form 2**k * m, with m odd. k and m are 1917 * computed separately, and then combined using a left shift. 1918 * 1919 * The function factorial_odd_part computes the odd part m (i.e., the greatest 1920 * odd divisor) of factorial(n), using the formula: 1921 * 1922 * factorial_odd_part(n) = 1923 * 1924 * product_{i >= 0} product_{0 < j <= n / 2**i, j odd} j 1925 * 1926 * Example: factorial_odd_part(20) = 1927 * 1928 * (1) * 1929 * (1) * 1930 * (1 * 3 * 5) * 1931 * (1 * 3 * 5 * 7 * 9) * 1932 * (1 * 3 * 5 * 7 * 9 * 11 * 13 * 15 * 17 * 19) 1933 * 1934 * Here i goes from large to small: the first term corresponds to i=4 (any 1935 * larger i gives an empty product), and the last term corresponds to i=0. 1936 * Each term can be computed from the last by multiplying by the extra odd 1937 * numbers required: e.g., to get from the penultimate term to the last one, 1938 * we multiply by (11 * 13 * 15 * 17 * 19). 1939 * 1940 * To see a hint of why this formula works, here are the same numbers as above 1941 * but with the even parts (i.e., the appropriate powers of 2) included. For 1942 * each subterm in the product for i, we multiply that subterm by 2**i: 1943 * 1944 * factorial(20) = 1945 * 1946 * (16) * 1947 * (8) * 1948 * (4 * 12 * 20) * 1949 * (2 * 6 * 10 * 14 * 18) * 1950 * (1 * 3 * 5 * 7 * 9 * 11 * 13 * 15 * 17 * 19) 1951 * 1952 * The factorial_partial_product function computes the product of all odd j in 1953 * range(start, stop) for given start and stop. It's used to compute the 1954 * partial products like (11 * 13 * 15 * 17 * 19) in the example above. It 1955 * operates recursively, repeatedly splitting the range into two roughly equal 1956 * pieces until the subranges are small enough to be computed using only C 1957 * integer arithmetic. 1958 * 1959 * The two-valuation k (i.e., the exponent of the largest power of 2 dividing 1960 * the factorial) is computed independently in the main math_factorial 1961 * function. By standard results, its value is: 1962 * 1963 * two_valuation = n//2 + n//4 + n//8 + .... 1964 * 1965 * It can be shown (e.g., by complete induction on n) that two_valuation is 1966 * equal to n - count_set_bits(n), where count_set_bits(n) gives the number of 1967 * '1'-bits in the binary expansion of n. 1968 */ 1969 1970/* factorial_partial_product: Compute product(range(start, stop, 2)) using 1971 * divide and conquer. Assumes start and stop are odd and stop > start. 1972 * max_bits must be >= bit_length(stop - 2). */ 1973 1974static PyObject * 1975factorial_partial_product(unsigned long start, unsigned long stop, 1976 unsigned long max_bits) 1977{ 1978 unsigned long midpoint, num_operands; 1979 PyObject *left = NULL, *right = NULL, *result = NULL; 1980 1981 /* If the return value will fit an unsigned long, then we can 1982 * multiply in a tight, fast loop where each multiply is O(1). 1983 * Compute an upper bound on the number of bits required to store 1984 * the answer. 1985 * 1986 * Storing some integer z requires floor(lg(z))+1 bits, which is 1987 * conveniently the value returned by bit_length(z). The 1988 * product x*y will require at most 1989 * bit_length(x) + bit_length(y) bits to store, based 1990 * on the idea that lg product = lg x + lg y. 1991 * 1992 * We know that stop - 2 is the largest number to be multiplied. From 1993 * there, we have: bit_length(answer) <= num_operands * 1994 * bit_length(stop - 2) 1995 */ 1996 1997 num_operands = (stop - start) / 2; 1998 /* The "num_operands <= 8 * SIZEOF_LONG" check guards against the 1999 * unlikely case of an overflow in num_operands * max_bits. */ 2000 if (num_operands <= 8 * SIZEOF_LONG && 2001 num_operands * max_bits <= 8 * SIZEOF_LONG) { 2002 unsigned long j, total; 2003 for (total = start, j = start + 2; j < stop; j += 2) 2004 total *= j; 2005 return PyLong_FromUnsignedLong(total); 2006 } 2007 2008 /* find midpoint of range(start, stop), rounded up to next odd number. */ 2009 midpoint = (start + num_operands) | 1; 2010 left = factorial_partial_product(start, midpoint, 2011 _Py_bit_length(midpoint - 2)); 2012 if (left == NULL) 2013 goto error; 2014 right = factorial_partial_product(midpoint, stop, max_bits); 2015 if (right == NULL) 2016 goto error; 2017 result = PyNumber_Multiply(left, right); 2018 2019 error: 2020 Py_XDECREF(left); 2021 Py_XDECREF(right); 2022 return result; 2023} 2024 2025/* factorial_odd_part: compute the odd part of factorial(n). */ 2026 2027static PyObject * 2028factorial_odd_part(unsigned long n) 2029{ 2030 long i; 2031 unsigned long v, lower, upper; 2032 PyObject *partial, *tmp, *inner, *outer; 2033 2034 inner = PyLong_FromLong(1); 2035 if (inner == NULL) 2036 return NULL; 2037 outer = inner; 2038 Py_INCREF(outer); 2039 2040 upper = 3; 2041 for (i = _Py_bit_length(n) - 2; i >= 0; i--) { 2042 v = n >> i; 2043 if (v <= 2) 2044 continue; 2045 lower = upper; 2046 /* (v + 1) | 1 = least odd integer strictly larger than n / 2**i */ 2047 upper = (v + 1) | 1; 2048 /* Here inner is the product of all odd integers j in the range (0, 2049 n/2**(i+1)]. The factorial_partial_product call below gives the 2050 product of all odd integers j in the range (n/2**(i+1), n/2**i]. */ 2051 partial = factorial_partial_product(lower, upper, _Py_bit_length(upper-2)); 2052 /* inner *= partial */ 2053 if (partial == NULL) 2054 goto error; 2055 tmp = PyNumber_Multiply(inner, partial); 2056 Py_DECREF(partial); 2057 if (tmp == NULL) 2058 goto error; 2059 Py_DECREF(inner); 2060 inner = tmp; 2061 /* Now inner is the product of all odd integers j in the range (0, 2062 n/2**i], giving the inner product in the formula above. */ 2063 2064 /* outer *= inner; */ 2065 tmp = PyNumber_Multiply(outer, inner); 2066 if (tmp == NULL) 2067 goto error; 2068 Py_DECREF(outer); 2069 outer = tmp; 2070 } 2071 Py_DECREF(inner); 2072 return outer; 2073 2074 error: 2075 Py_DECREF(outer); 2076 Py_DECREF(inner); 2077 return NULL; 2078} 2079 2080 2081/* Lookup table for small factorial values */ 2082 2083static const unsigned long SmallFactorials[] = { 2084 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 2085 362880, 3628800, 39916800, 479001600, 2086#if SIZEOF_LONG >= 8 2087 6227020800, 87178291200, 1307674368000, 2088 20922789888000, 355687428096000, 6402373705728000, 2089 121645100408832000, 2432902008176640000 2090#endif 2091}; 2092 2093/*[clinic input] 2094math.factorial 2095 2096 n as arg: object 2097 / 2098 2099Find n!. 2100 2101Raise a ValueError if x is negative or non-integral. 2102[clinic start generated code]*/ 2103 2104static PyObject * 2105math_factorial(PyObject *module, PyObject *arg) 2106/*[clinic end generated code: output=6686f26fae00e9ca input=713fb771677e8c31]*/ 2107{ 2108 long x, two_valuation; 2109 int overflow; 2110 PyObject *result, *odd_part; 2111 2112 x = PyLong_AsLongAndOverflow(arg, &overflow); 2113 if (x == -1 && PyErr_Occurred()) { 2114 return NULL; 2115 } 2116 else if (overflow == 1) { 2117 PyErr_Format(PyExc_OverflowError, 2118 "factorial() argument should not exceed %ld", 2119 LONG_MAX); 2120 return NULL; 2121 } 2122 else if (overflow == -1 || x < 0) { 2123 PyErr_SetString(PyExc_ValueError, 2124 "factorial() not defined for negative values"); 2125 return NULL; 2126 } 2127 2128 /* use lookup table if x is small */ 2129 if (x < (long)Py_ARRAY_LENGTH(SmallFactorials)) 2130 return PyLong_FromUnsignedLong(SmallFactorials[x]); 2131 2132 /* else express in the form odd_part * 2**two_valuation, and compute as 2133 odd_part << two_valuation. */ 2134 odd_part = factorial_odd_part(x); 2135 if (odd_part == NULL) 2136 return NULL; 2137 two_valuation = x - count_set_bits(x); 2138 result = _PyLong_Lshift(odd_part, two_valuation); 2139 Py_DECREF(odd_part); 2140 return result; 2141} 2142 2143 2144/*[clinic input] 2145math.trunc 2146 2147 x: object 2148 / 2149 2150Truncates the Real x to the nearest Integral toward 0. 2151 2152Uses the __trunc__ magic method. 2153[clinic start generated code]*/ 2154 2155static PyObject * 2156math_trunc(PyObject *module, PyObject *x) 2157/*[clinic end generated code: output=34b9697b707e1031 input=2168b34e0a09134d]*/ 2158{ 2159 _Py_IDENTIFIER(__trunc__); 2160 PyObject *trunc, *result; 2161 2162 if (PyFloat_CheckExact(x)) { 2163 return PyFloat_Type.tp_as_number->nb_int(x); 2164 } 2165 2166 if (Py_TYPE(x)->tp_dict == NULL) { 2167 if (PyType_Ready(Py_TYPE(x)) < 0) 2168 return NULL; 2169 } 2170 2171 trunc = _PyObject_LookupSpecialId(x, &PyId___trunc__); 2172 if (trunc == NULL) { 2173 if (!PyErr_Occurred()) 2174 PyErr_Format(PyExc_TypeError, 2175 "type %.100s doesn't define __trunc__ method", 2176 Py_TYPE(x)->tp_name); 2177 return NULL; 2178 } 2179 result = _PyObject_CallNoArgs(trunc); 2180 Py_DECREF(trunc); 2181 return result; 2182} 2183 2184 2185/*[clinic input] 2186math.frexp 2187 2188 x: double 2189 / 2190 2191Return the mantissa and exponent of x, as pair (m, e). 2192 2193m is a float and e is an int, such that x = m * 2.**e. 2194If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0. 2195[clinic start generated code]*/ 2196 2197static PyObject * 2198math_frexp_impl(PyObject *module, double x) 2199/*[clinic end generated code: output=03e30d252a15ad4a input=96251c9e208bc6e9]*/ 2200{ 2201 int i; 2202 /* deal with special cases directly, to sidestep platform 2203 differences */ 2204 if (Py_IS_NAN(x) || Py_IS_INFINITY(x) || !x) { 2205 i = 0; 2206 } 2207 else { 2208 x = frexp(x, &i); 2209 } 2210 return Py_BuildValue("(di)", x, i); 2211} 2212 2213 2214/*[clinic input] 2215math.ldexp 2216 2217 x: double 2218 i: object 2219 / 2220 2221Return x * (2**i). 2222 2223This is essentially the inverse of frexp(). 2224[clinic start generated code]*/ 2225 2226static PyObject * 2227math_ldexp_impl(PyObject *module, double x, PyObject *i) 2228/*[clinic end generated code: output=b6892f3c2df9cc6a input=17d5970c1a40a8c1]*/ 2229{ 2230 double r; 2231 long exp; 2232 int overflow; 2233 2234 if (PyLong_Check(i)) { 2235 /* on overflow, replace exponent with either LONG_MAX 2236 or LONG_MIN, depending on the sign. */ 2237 exp = PyLong_AsLongAndOverflow(i, &overflow); 2238 if (exp == -1 && PyErr_Occurred()) 2239 return NULL; 2240 if (overflow) 2241 exp = overflow < 0 ? LONG_MIN : LONG_MAX; 2242 } 2243 else { 2244 PyErr_SetString(PyExc_TypeError, 2245 "Expected an int as second argument to ldexp."); 2246 return NULL; 2247 } 2248 2249 if (x == 0. || !Py_IS_FINITE(x)) { 2250 /* NaNs, zeros and infinities are returned unchanged */ 2251 r = x; 2252 errno = 0; 2253 } else if (exp > INT_MAX) { 2254 /* overflow */ 2255 r = copysign(Py_HUGE_VAL, x); 2256 errno = ERANGE; 2257 } else if (exp < INT_MIN) { 2258 /* underflow to +-0 */ 2259 r = copysign(0., x); 2260 errno = 0; 2261 } else { 2262 errno = 0; 2263 r = ldexp(x, (int)exp); 2264 if (Py_IS_INFINITY(r)) 2265 errno = ERANGE; 2266 } 2267 2268 if (errno && is_error(r)) 2269 return NULL; 2270 return PyFloat_FromDouble(r); 2271} 2272 2273 2274/*[clinic input] 2275math.modf 2276 2277 x: double 2278 / 2279 2280Return the fractional and integer parts of x. 2281 2282Both results carry the sign of x and are floats. 2283[clinic start generated code]*/ 2284 2285static PyObject * 2286math_modf_impl(PyObject *module, double x) 2287/*[clinic end generated code: output=90cee0260014c3c0 input=b4cfb6786afd9035]*/ 2288{ 2289 double y; 2290 /* some platforms don't do the right thing for NaNs and 2291 infinities, so we take care of special cases directly. */ 2292 if (!Py_IS_FINITE(x)) { 2293 if (Py_IS_INFINITY(x)) 2294 return Py_BuildValue("(dd)", copysign(0., x), x); 2295 else if (Py_IS_NAN(x)) 2296 return Py_BuildValue("(dd)", x, x); 2297 } 2298 2299 errno = 0; 2300 x = modf(x, &y); 2301 return Py_BuildValue("(dd)", x, y); 2302} 2303 2304 2305/* A decent logarithm is easy to compute even for huge ints, but libm can't 2306 do that by itself -- loghelper can. func is log or log10, and name is 2307 "log" or "log10". Note that overflow of the result isn't possible: an int 2308 can contain no more than INT_MAX * SHIFT bits, so has value certainly less 2309 than 2**(2**64 * 2**16) == 2**2**80, and log2 of that is 2**80, which is 2310 small enough to fit in an IEEE single. log and log10 are even smaller. 2311 However, intermediate overflow is possible for an int if the number of bits 2312 in that int is larger than PY_SSIZE_T_MAX. */ 2313 2314static PyObject* 2315loghelper(PyObject* arg, double (*func)(double), const char *funcname) 2316{ 2317 /* If it is int, do it ourselves. */ 2318 if (PyLong_Check(arg)) { 2319 double x, result; 2320 Py_ssize_t e; 2321 2322 /* Negative or zero inputs give a ValueError. */ 2323 if (Py_SIZE(arg) <= 0) { 2324 PyErr_SetString(PyExc_ValueError, 2325 "math domain error"); 2326 return NULL; 2327 } 2328 2329 x = PyLong_AsDouble(arg); 2330 if (x == -1.0 && PyErr_Occurred()) { 2331 if (!PyErr_ExceptionMatches(PyExc_OverflowError)) 2332 return NULL; 2333 /* Here the conversion to double overflowed, but it's possible 2334 to compute the log anyway. Clear the exception and continue. */ 2335 PyErr_Clear(); 2336 x = _PyLong_Frexp((PyLongObject *)arg, &e); 2337 if (x == -1.0 && PyErr_Occurred()) 2338 return NULL; 2339 /* Value is ~= x * 2**e, so the log ~= log(x) + log(2) * e. */ 2340 result = func(x) + func(2.0) * e; 2341 } 2342 else 2343 /* Successfully converted x to a double. */ 2344 result = func(x); 2345 return PyFloat_FromDouble(result); 2346 } 2347 2348 /* Else let libm handle it by itself. */ 2349 return math_1(arg, func, 0); 2350} 2351 2352 2353/*[clinic input] 2354math.log 2355 2356 x: object 2357 [ 2358 base: object(c_default="NULL") = math.e 2359 ] 2360 / 2361 2362Return the logarithm of x to the given base. 2363 2364If the base not specified, returns the natural logarithm (base e) of x. 2365[clinic start generated code]*/ 2366 2367static PyObject * 2368math_log_impl(PyObject *module, PyObject *x, int group_right_1, 2369 PyObject *base) 2370/*[clinic end generated code: output=7b5a39e526b73fc9 input=0f62d5726cbfebbd]*/ 2371{ 2372 PyObject *num, *den; 2373 PyObject *ans; 2374 2375 num = loghelper(x, m_log, "log"); 2376 if (num == NULL || base == NULL) 2377 return num; 2378 2379 den = loghelper(base, m_log, "log"); 2380 if (den == NULL) { 2381 Py_DECREF(num); 2382 return NULL; 2383 } 2384 2385 ans = PyNumber_TrueDivide(num, den); 2386 Py_DECREF(num); 2387 Py_DECREF(den); 2388 return ans; 2389} 2390 2391 2392/*[clinic input] 2393math.log2 2394 2395 x: object 2396 / 2397 2398Return the base 2 logarithm of x. 2399[clinic start generated code]*/ 2400 2401static PyObject * 2402math_log2(PyObject *module, PyObject *x) 2403/*[clinic end generated code: output=5425899a4d5d6acb input=08321262bae4f39b]*/ 2404{ 2405 return loghelper(x, m_log2, "log2"); 2406} 2407 2408 2409/*[clinic input] 2410math.log10 2411 2412 x: object 2413 / 2414 2415Return the base 10 logarithm of x. 2416[clinic start generated code]*/ 2417 2418static PyObject * 2419math_log10(PyObject *module, PyObject *x) 2420/*[clinic end generated code: output=be72a64617df9c6f input=b2469d02c6469e53]*/ 2421{ 2422 return loghelper(x, m_log10, "log10"); 2423} 2424 2425 2426/*[clinic input] 2427math.fmod 2428 2429 x: double 2430 y: double 2431 / 2432 2433Return fmod(x, y), according to platform C. 2434 2435x % y may differ. 2436[clinic start generated code]*/ 2437 2438static PyObject * 2439math_fmod_impl(PyObject *module, double x, double y) 2440/*[clinic end generated code: output=7559d794343a27b5 input=4f84caa8cfc26a03]*/ 2441{ 2442 double r; 2443 /* fmod(x, +/-Inf) returns x for finite x. */ 2444 if (Py_IS_INFINITY(y) && Py_IS_FINITE(x)) 2445 return PyFloat_FromDouble(x); 2446 errno = 0; 2447 r = fmod(x, y); 2448 if (Py_IS_NAN(r)) { 2449 if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) 2450 errno = EDOM; 2451 else 2452 errno = 0; 2453 } 2454 if (errno && is_error(r)) 2455 return NULL; 2456 else 2457 return PyFloat_FromDouble(r); 2458} 2459 2460/* 2461Given a *vec* of values, compute the vector norm: 2462 2463 sqrt(sum(x ** 2 for x in vec)) 2464 2465The *max* variable should be equal to the largest fabs(x). 2466The *n* variable is the length of *vec*. 2467If n==0, then *max* should be 0.0. 2468If an infinity is present in the vec, *max* should be INF. 2469The *found_nan* variable indicates whether some member of 2470the *vec* is a NaN. 2471 2472To avoid overflow/underflow and to achieve high accuracy giving results 2473that are almost always correctly rounded, four techniques are used: 2474 2475* lossless scaling using a power-of-two scaling factor 2476* accurate squaring using Veltkamp-Dekker splitting [1] 2477* compensated summation using a variant of the Neumaier algorithm [2] 2478* differential correction of the square root [3] 2479 2480The usual presentation of the Neumaier summation algorithm has an 2481expensive branch depending on which operand has the larger 2482magnitude. We avoid this cost by arranging the calculation so that 2483fabs(csum) is always as large as fabs(x). 2484 2485To establish the invariant, *csum* is initialized to 1.0 which is 2486always larger than x**2 after scaling or after division by *max*. 2487After the loop is finished, the initial 1.0 is subtracted out for a 2488net zero effect on the final sum. Since *csum* will be greater than 24891.0, the subtraction of 1.0 will not cause fractional digits to be 2490dropped from *csum*. 2491 2492To get the full benefit from compensated summation, the largest 2493addend should be in the range: 0.5 <= |x| <= 1.0. Accordingly, 2494scaling or division by *max* should not be skipped even if not 2495otherwise needed to prevent overflow or loss of precision. 2496 2497The assertion that hi*hi <= 1.0 is a bit subtle. Each vector element 2498gets scaled to a magnitude below 1.0. The Veltkamp-Dekker splitting 2499algorithm gives a *hi* value that is correctly rounded to half 2500precision. When a value at or below 1.0 is correctly rounded, it 2501never goes above 1.0. And when values at or below 1.0 are squared, 2502they remain at or below 1.0, thus preserving the summation invariant. 2503 2504Another interesting assertion is that csum+lo*lo == csum. In the loop, 2505each scaled vector element has a magnitude less than 1.0. After the 2506Veltkamp split, *lo* has a maximum value of 2**-27. So the maximum 2507value of *lo* squared is 2**-54. The value of ulp(1.0)/2.0 is 2**-53. 2508Given that csum >= 1.0, we have: 2509 lo**2 <= 2**-54 < 2**-53 == 1/2*ulp(1.0) <= ulp(csum)/2 2510Since lo**2 is less than 1/2 ulp(csum), we have csum+lo*lo == csum. 2511 2512To minimize loss of information during the accumulation of fractional 2513values, each term has a separate accumulator. This also breaks up 2514sequential dependencies in the inner loop so the CPU can maximize 2515floating point throughput. [4] On a 2.6 GHz Haswell, adding one 2516dimension has an incremental cost of only 5ns -- for example when 2517moving from hypot(x,y) to hypot(x,y,z). 2518 2519The square root differential correction is needed because a 2520correctly rounded square root of a correctly rounded sum of 2521squares can still be off by as much as one ulp. 2522 2523The differential correction starts with a value *x* that is 2524the difference between the square of *h*, the possibly inaccurately 2525rounded square root, and the accurately computed sum of squares. 2526The correction is the first order term of the Maclaurin series 2527expansion of sqrt(h**2 + x) == h + x/(2*h) + O(x**2). [5] 2528 2529Essentially, this differential correction is equivalent to one 2530refinement step in Newton's divide-and-average square root 2531algorithm, effectively doubling the number of accurate bits. 2532This technique is used in Dekker's SQRT2 algorithm and again in 2533Borges' ALGORITHM 4 and 5. 2534 2535Without proof for all cases, hypot() cannot claim to be always 2536correctly rounded. However for n <= 1000, prior to the final addition 2537that rounds the overall result, the internal accuracy of "h" together 2538with its correction of "x / (2.0 * h)" is at least 100 bits. [6] 2539Also, hypot() was tested against a Decimal implementation with 2540prec=300. After 100 million trials, no incorrectly rounded examples 2541were found. In addition, perfect commutativity (all permutations are 2542exactly equal) was verified for 1 billion random inputs with n=5. [7] 2543 2544References: 2545 25461. Veltkamp-Dekker splitting: http://csclub.uwaterloo.ca/~pbarfuss/dekker1971.pdf 25472. Compensated summation: http://www.ti3.tu-harburg.de/paper/rump/Ru08b.pdf 25483. Square root differential correction: https://arxiv.org/pdf/1904.09481.pdf 25494. Data dependency graph: https://bugs.python.org/file49439/hypot.png 25505. https://www.wolframalpha.com/input/?i=Maclaurin+series+sqrt%28h**2+%2B+x%29+at+x%3D0 25516. Analysis of internal accuracy: https://bugs.python.org/file49484/best_frac.py 25527. Commutativity test: https://bugs.python.org/file49448/test_hypot_commutativity.py 2553 2554*/ 2555 2556static inline double 2557vector_norm(Py_ssize_t n, double *vec, double max, int found_nan) 2558{ 2559 const double T27 = 134217729.0; /* ldexp(1.0, 27) + 1.0) */ 2560 double x, scale, oldcsum, csum = 1.0, frac1 = 0.0, frac2 = 0.0, frac3 = 0.0; 2561 double t, hi, lo, h; 2562 int max_e; 2563 Py_ssize_t i; 2564 2565 if (Py_IS_INFINITY(max)) { 2566 return max; 2567 } 2568 if (found_nan) { 2569 return Py_NAN; 2570 } 2571 if (max == 0.0 || n <= 1) { 2572 return max; 2573 } 2574 frexp(max, &max_e); 2575 if (max_e >= -1023) { 2576 scale = ldexp(1.0, -max_e); 2577 assert(max * scale >= 0.5); 2578 assert(max * scale < 1.0); 2579 for (i=0 ; i < n ; i++) { 2580 x = vec[i]; 2581 assert(Py_IS_FINITE(x) && fabs(x) <= max); 2582 2583 x *= scale; 2584 assert(fabs(x) < 1.0); 2585 2586 t = x * T27; 2587 hi = t - (t - x); 2588 lo = x - hi; 2589 assert(hi + lo == x); 2590 2591 x = hi * hi; 2592 assert(x <= 1.0); 2593 assert(fabs(csum) >= fabs(x)); 2594 oldcsum = csum; 2595 csum += x; 2596 frac1 += (oldcsum - csum) + x; 2597 2598 x = 2.0 * hi * lo; 2599 assert(fabs(csum) >= fabs(x)); 2600 oldcsum = csum; 2601 csum += x; 2602 frac2 += (oldcsum - csum) + x; 2603 2604 assert(csum + lo * lo == csum); 2605 frac3 += lo * lo; 2606 } 2607 h = sqrt(csum - 1.0 + (frac1 + frac2 + frac3)); 2608 2609 x = h; 2610 t = x * T27; 2611 hi = t - (t - x); 2612 lo = x - hi; 2613 assert (hi + lo == x); 2614 2615 x = -hi * hi; 2616 assert(fabs(csum) >= fabs(x)); 2617 oldcsum = csum; 2618 csum += x; 2619 frac1 += (oldcsum - csum) + x; 2620 2621 x = -2.0 * hi * lo; 2622 assert(fabs(csum) >= fabs(x)); 2623 oldcsum = csum; 2624 csum += x; 2625 frac2 += (oldcsum - csum) + x; 2626 2627 x = -lo * lo; 2628 assert(fabs(csum) >= fabs(x)); 2629 oldcsum = csum; 2630 csum += x; 2631 frac3 += (oldcsum - csum) + x; 2632 2633 x = csum - 1.0 + (frac1 + frac2 + frac3); 2634 return (h + x / (2.0 * h)) / scale; 2635 } 2636 /* When max_e < -1023, ldexp(1.0, -max_e) overflows. 2637 So instead of multiplying by a scale, we just divide by *max*. 2638 */ 2639 for (i=0 ; i < n ; i++) { 2640 x = vec[i]; 2641 assert(Py_IS_FINITE(x) && fabs(x) <= max); 2642 x /= max; 2643 x = x*x; 2644 assert(x <= 1.0); 2645 assert(fabs(csum) >= fabs(x)); 2646 oldcsum = csum; 2647 csum += x; 2648 frac1 += (oldcsum - csum) + x; 2649 } 2650 return max * sqrt(csum - 1.0 + frac1); 2651} 2652 2653#define NUM_STACK_ELEMS 16 2654 2655/*[clinic input] 2656math.dist 2657 2658 p: object 2659 q: object 2660 / 2661 2662Return the Euclidean distance between two points p and q. 2663 2664The points should be specified as sequences (or iterables) of 2665coordinates. Both inputs must have the same dimension. 2666 2667Roughly equivalent to: 2668 sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q))) 2669[clinic start generated code]*/ 2670 2671static PyObject * 2672math_dist_impl(PyObject *module, PyObject *p, PyObject *q) 2673/*[clinic end generated code: output=56bd9538d06bbcfe input=74e85e1b6092e68e]*/ 2674{ 2675 PyObject *item; 2676 double max = 0.0; 2677 double x, px, qx, result; 2678 Py_ssize_t i, m, n; 2679 int found_nan = 0, p_allocated = 0, q_allocated = 0; 2680 double diffs_on_stack[NUM_STACK_ELEMS]; 2681 double *diffs = diffs_on_stack; 2682 2683 if (!PyTuple_Check(p)) { 2684 p = PySequence_Tuple(p); 2685 if (p == NULL) { 2686 return NULL; 2687 } 2688 p_allocated = 1; 2689 } 2690 if (!PyTuple_Check(q)) { 2691 q = PySequence_Tuple(q); 2692 if (q == NULL) { 2693 if (p_allocated) { 2694 Py_DECREF(p); 2695 } 2696 return NULL; 2697 } 2698 q_allocated = 1; 2699 } 2700 2701 m = PyTuple_GET_SIZE(p); 2702 n = PyTuple_GET_SIZE(q); 2703 if (m != n) { 2704 PyErr_SetString(PyExc_ValueError, 2705 "both points must have the same number of dimensions"); 2706 goto error_exit; 2707 } 2708 if (n > NUM_STACK_ELEMS) { 2709 diffs = (double *) PyObject_Malloc(n * sizeof(double)); 2710 if (diffs == NULL) { 2711 PyErr_NoMemory(); 2712 goto error_exit; 2713 } 2714 } 2715 for (i=0 ; i<n ; i++) { 2716 item = PyTuple_GET_ITEM(p, i); 2717 ASSIGN_DOUBLE(px, item, error_exit); 2718 item = PyTuple_GET_ITEM(q, i); 2719 ASSIGN_DOUBLE(qx, item, error_exit); 2720 x = fabs(px - qx); 2721 diffs[i] = x; 2722 found_nan |= Py_IS_NAN(x); 2723 if (x > max) { 2724 max = x; 2725 } 2726 } 2727 result = vector_norm(n, diffs, max, found_nan); 2728 if (diffs != diffs_on_stack) { 2729 PyObject_Free(diffs); 2730 } 2731 if (p_allocated) { 2732 Py_DECREF(p); 2733 } 2734 if (q_allocated) { 2735 Py_DECREF(q); 2736 } 2737 return PyFloat_FromDouble(result); 2738 2739 error_exit: 2740 if (diffs != diffs_on_stack) { 2741 PyObject_Free(diffs); 2742 } 2743 if (p_allocated) { 2744 Py_DECREF(p); 2745 } 2746 if (q_allocated) { 2747 Py_DECREF(q); 2748 } 2749 return NULL; 2750} 2751 2752/* AC: cannot convert yet, waiting for *args support */ 2753static PyObject * 2754math_hypot(PyObject *self, PyObject *const *args, Py_ssize_t nargs) 2755{ 2756 Py_ssize_t i; 2757 PyObject *item; 2758 double max = 0.0; 2759 double x, result; 2760 int found_nan = 0; 2761 double coord_on_stack[NUM_STACK_ELEMS]; 2762 double *coordinates = coord_on_stack; 2763 2764 if (nargs > NUM_STACK_ELEMS) { 2765 coordinates = (double *) PyObject_Malloc(nargs * sizeof(double)); 2766 if (coordinates == NULL) { 2767 return PyErr_NoMemory(); 2768 } 2769 } 2770 for (i = 0; i < nargs; i++) { 2771 item = args[i]; 2772 ASSIGN_DOUBLE(x, item, error_exit); 2773 x = fabs(x); 2774 coordinates[i] = x; 2775 found_nan |= Py_IS_NAN(x); 2776 if (x > max) { 2777 max = x; 2778 } 2779 } 2780 result = vector_norm(nargs, coordinates, max, found_nan); 2781 if (coordinates != coord_on_stack) { 2782 PyObject_Free(coordinates); 2783 } 2784 return PyFloat_FromDouble(result); 2785 2786 error_exit: 2787 if (coordinates != coord_on_stack) { 2788 PyObject_Free(coordinates); 2789 } 2790 return NULL; 2791} 2792 2793#undef NUM_STACK_ELEMS 2794 2795PyDoc_STRVAR(math_hypot_doc, 2796 "hypot(*coordinates) -> value\n\n\ 2797Multidimensional Euclidean distance from the origin to a point.\n\ 2798\n\ 2799Roughly equivalent to:\n\ 2800 sqrt(sum(x**2 for x in coordinates))\n\ 2801\n\ 2802For a two dimensional point (x, y), gives the hypotenuse\n\ 2803using the Pythagorean theorem: sqrt(x*x + y*y).\n\ 2804\n\ 2805For example, the hypotenuse of a 3/4/5 right triangle is:\n\ 2806\n\ 2807 >>> hypot(3.0, 4.0)\n\ 2808 5.0\n\ 2809"); 2810 2811/* pow can't use math_2, but needs its own wrapper: the problem is 2812 that an infinite result can arise either as a result of overflow 2813 (in which case OverflowError should be raised) or as a result of 2814 e.g. 0.**-5. (for which ValueError needs to be raised.) 2815*/ 2816 2817/*[clinic input] 2818math.pow 2819 2820 x: double 2821 y: double 2822 / 2823 2824Return x**y (x to the power of y). 2825[clinic start generated code]*/ 2826 2827static PyObject * 2828math_pow_impl(PyObject *module, double x, double y) 2829/*[clinic end generated code: output=fff93e65abccd6b0 input=c26f1f6075088bfd]*/ 2830{ 2831 double r; 2832 int odd_y; 2833 2834 /* deal directly with IEEE specials, to cope with problems on various 2835 platforms whose semantics don't exactly match C99 */ 2836 r = 0.; /* silence compiler warning */ 2837 if (!Py_IS_FINITE(x) || !Py_IS_FINITE(y)) { 2838 errno = 0; 2839 if (Py_IS_NAN(x)) 2840 r = y == 0. ? 1. : x; /* NaN**0 = 1 */ 2841 else if (Py_IS_NAN(y)) 2842 r = x == 1. ? 1. : y; /* 1**NaN = 1 */ 2843 else if (Py_IS_INFINITY(x)) { 2844 odd_y = Py_IS_FINITE(y) && fmod(fabs(y), 2.0) == 1.0; 2845 if (y > 0.) 2846 r = odd_y ? x : fabs(x); 2847 else if (y == 0.) 2848 r = 1.; 2849 else /* y < 0. */ 2850 r = odd_y ? copysign(0., x) : 0.; 2851 } 2852 else if (Py_IS_INFINITY(y)) { 2853 if (fabs(x) == 1.0) 2854 r = 1.; 2855 else if (y > 0. && fabs(x) > 1.0) 2856 r = y; 2857 else if (y < 0. && fabs(x) < 1.0) { 2858 r = -y; /* result is +inf */ 2859 } 2860 else 2861 r = 0.; 2862 } 2863 } 2864 else { 2865 /* let libm handle finite**finite */ 2866 errno = 0; 2867 r = pow(x, y); 2868 /* a NaN result should arise only from (-ve)**(finite 2869 non-integer); in this case we want to raise ValueError. */ 2870 if (!Py_IS_FINITE(r)) { 2871 if (Py_IS_NAN(r)) { 2872 errno = EDOM; 2873 } 2874 /* 2875 an infinite result here arises either from: 2876 (A) (+/-0.)**negative (-> divide-by-zero) 2877 (B) overflow of x**y with x and y finite 2878 */ 2879 else if (Py_IS_INFINITY(r)) { 2880 if (x == 0.) 2881 errno = EDOM; 2882 else 2883 errno = ERANGE; 2884 } 2885 } 2886 } 2887 2888 if (errno && is_error(r)) 2889 return NULL; 2890 else 2891 return PyFloat_FromDouble(r); 2892} 2893 2894 2895static const double degToRad = Py_MATH_PI / 180.0; 2896static const double radToDeg = 180.0 / Py_MATH_PI; 2897 2898/*[clinic input] 2899math.degrees 2900 2901 x: double 2902 / 2903 2904Convert angle x from radians to degrees. 2905[clinic start generated code]*/ 2906 2907static PyObject * 2908math_degrees_impl(PyObject *module, double x) 2909/*[clinic end generated code: output=7fea78b294acd12f input=81e016555d6e3660]*/ 2910{ 2911 return PyFloat_FromDouble(x * radToDeg); 2912} 2913 2914 2915/*[clinic input] 2916math.radians 2917 2918 x: double 2919 / 2920 2921Convert angle x from degrees to radians. 2922[clinic start generated code]*/ 2923 2924static PyObject * 2925math_radians_impl(PyObject *module, double x) 2926/*[clinic end generated code: output=34daa47caf9b1590 input=91626fc489fe3d63]*/ 2927{ 2928 return PyFloat_FromDouble(x * degToRad); 2929} 2930 2931 2932/*[clinic input] 2933math.isfinite 2934 2935 x: double 2936 / 2937 2938Return True if x is neither an infinity nor a NaN, and False otherwise. 2939[clinic start generated code]*/ 2940 2941static PyObject * 2942math_isfinite_impl(PyObject *module, double x) 2943/*[clinic end generated code: output=8ba1f396440c9901 input=46967d254812e54a]*/ 2944{ 2945 return PyBool_FromLong((long)Py_IS_FINITE(x)); 2946} 2947 2948 2949/*[clinic input] 2950math.isnan 2951 2952 x: double 2953 / 2954 2955Return True if x is a NaN (not a number), and False otherwise. 2956[clinic start generated code]*/ 2957 2958static PyObject * 2959math_isnan_impl(PyObject *module, double x) 2960/*[clinic end generated code: output=f537b4d6df878c3e input=935891e66083f46a]*/ 2961{ 2962 return PyBool_FromLong((long)Py_IS_NAN(x)); 2963} 2964 2965 2966/*[clinic input] 2967math.isinf 2968 2969 x: double 2970 / 2971 2972Return True if x is a positive or negative infinity, and False otherwise. 2973[clinic start generated code]*/ 2974 2975static PyObject * 2976math_isinf_impl(PyObject *module, double x) 2977/*[clinic end generated code: output=9f00cbec4de7b06b input=32630e4212cf961f]*/ 2978{ 2979 return PyBool_FromLong((long)Py_IS_INFINITY(x)); 2980} 2981 2982 2983/*[clinic input] 2984math.isclose -> bool 2985 2986 a: double 2987 b: double 2988 * 2989 rel_tol: double = 1e-09 2990 maximum difference for being considered "close", relative to the 2991 magnitude of the input values 2992 abs_tol: double = 0.0 2993 maximum difference for being considered "close", regardless of the 2994 magnitude of the input values 2995 2996Determine whether two floating point numbers are close in value. 2997 2998Return True if a is close in value to b, and False otherwise. 2999 3000For the values to be considered close, the difference between them 3001must be smaller than at least one of the tolerances. 3002 3003-inf, inf and NaN behave similarly to the IEEE 754 Standard. That 3004is, NaN is not close to anything, even itself. inf and -inf are 3005only close to themselves. 3006[clinic start generated code]*/ 3007 3008static int 3009math_isclose_impl(PyObject *module, double a, double b, double rel_tol, 3010 double abs_tol) 3011/*[clinic end generated code: output=b73070207511952d input=f28671871ea5bfba]*/ 3012{ 3013 double diff = 0.0; 3014 3015 /* sanity check on the inputs */ 3016 if (rel_tol < 0.0 || abs_tol < 0.0 ) { 3017 PyErr_SetString(PyExc_ValueError, 3018 "tolerances must be non-negative"); 3019 return -1; 3020 } 3021 3022 if ( a == b ) { 3023 /* short circuit exact equality -- needed to catch two infinities of 3024 the same sign. And perhaps speeds things up a bit sometimes. 3025 */ 3026 return 1; 3027 } 3028 3029 /* This catches the case of two infinities of opposite sign, or 3030 one infinity and one finite number. Two infinities of opposite 3031 sign would otherwise have an infinite relative tolerance. 3032 Two infinities of the same sign are caught by the equality check 3033 above. 3034 */ 3035 3036 if (Py_IS_INFINITY(a) || Py_IS_INFINITY(b)) { 3037 return 0; 3038 } 3039 3040 /* now do the regular computation 3041 this is essentially the "weak" test from the Boost library 3042 */ 3043 3044 diff = fabs(b - a); 3045 3046 return (((diff <= fabs(rel_tol * b)) || 3047 (diff <= fabs(rel_tol * a))) || 3048 (diff <= abs_tol)); 3049} 3050 3051static inline int 3052_check_long_mult_overflow(long a, long b) { 3053 3054 /* From Python2's int_mul code: 3055 3056 Integer overflow checking for * is painful: Python tried a couple ways, but 3057 they didn't work on all platforms, or failed in endcases (a product of 3058 -sys.maxint-1 has been a particular pain). 3059 3060 Here's another way: 3061 3062 The native long product x*y is either exactly right or *way* off, being 3063 just the last n bits of the true product, where n is the number of bits 3064 in a long (the delivered product is the true product plus i*2**n for 3065 some integer i). 3066 3067 The native double product (double)x * (double)y is subject to three 3068 rounding errors: on a sizeof(long)==8 box, each cast to double can lose 3069 info, and even on a sizeof(long)==4 box, the multiplication can lose info. 3070 But, unlike the native long product, it's not in *range* trouble: even 3071 if sizeof(long)==32 (256-bit longs), the product easily fits in the 3072 dynamic range of a double. So the leading 50 (or so) bits of the double 3073 product are correct. 3074 3075 We check these two ways against each other, and declare victory if they're 3076 approximately the same. Else, because the native long product is the only 3077 one that can lose catastrophic amounts of information, it's the native long 3078 product that must have overflowed. 3079 3080 */ 3081 3082 long longprod = (long)((unsigned long)a * b); 3083 double doubleprod = (double)a * (double)b; 3084 double doubled_longprod = (double)longprod; 3085 3086 if (doubled_longprod == doubleprod) { 3087 return 0; 3088 } 3089 3090 const double diff = doubled_longprod - doubleprod; 3091 const double absdiff = diff >= 0.0 ? diff : -diff; 3092 const double absprod = doubleprod >= 0.0 ? doubleprod : -doubleprod; 3093 3094 if (32.0 * absdiff <= absprod) { 3095 return 0; 3096 } 3097 3098 return 1; 3099} 3100 3101/*[clinic input] 3102math.prod 3103 3104 iterable: object 3105 / 3106 * 3107 start: object(c_default="NULL") = 1 3108 3109Calculate the product of all the elements in the input iterable. 3110 3111The default start value for the product is 1. 3112 3113When the iterable is empty, return the start value. This function is 3114intended specifically for use with numeric values and may reject 3115non-numeric types. 3116[clinic start generated code]*/ 3117 3118static PyObject * 3119math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start) 3120/*[clinic end generated code: output=36153bedac74a198 input=4c5ab0682782ed54]*/ 3121{ 3122 PyObject *result = start; 3123 PyObject *temp, *item, *iter; 3124 3125 iter = PyObject_GetIter(iterable); 3126 if (iter == NULL) { 3127 return NULL; 3128 } 3129 3130 if (result == NULL) { 3131 result = _PyLong_GetOne(); 3132 } 3133 Py_INCREF(result); 3134#ifndef SLOW_PROD 3135 /* Fast paths for integers keeping temporary products in C. 3136 * Assumes all inputs are the same type. 3137 * If the assumption fails, default to use PyObjects instead. 3138 */ 3139 if (PyLong_CheckExact(result)) { 3140 int overflow; 3141 long i_result = PyLong_AsLongAndOverflow(result, &overflow); 3142 /* If this already overflowed, don't even enter the loop. */ 3143 if (overflow == 0) { 3144 Py_DECREF(result); 3145 result = NULL; 3146 } 3147 /* Loop over all the items in the iterable until we finish, we overflow 3148 * or we found a non integer element */ 3149 while (result == NULL) { 3150 item = PyIter_Next(iter); 3151 if (item == NULL) { 3152 Py_DECREF(iter); 3153 if (PyErr_Occurred()) { 3154 return NULL; 3155 } 3156 return PyLong_FromLong(i_result); 3157 } 3158 if (PyLong_CheckExact(item)) { 3159 long b = PyLong_AsLongAndOverflow(item, &overflow); 3160 if (overflow == 0 && !_check_long_mult_overflow(i_result, b)) { 3161 long x = i_result * b; 3162 i_result = x; 3163 Py_DECREF(item); 3164 continue; 3165 } 3166 } 3167 /* Either overflowed or is not an int. 3168 * Restore real objects and process normally */ 3169 result = PyLong_FromLong(i_result); 3170 if (result == NULL) { 3171 Py_DECREF(item); 3172 Py_DECREF(iter); 3173 return NULL; 3174 } 3175 temp = PyNumber_Multiply(result, item); 3176 Py_DECREF(result); 3177 Py_DECREF(item); 3178 result = temp; 3179 if (result == NULL) { 3180 Py_DECREF(iter); 3181 return NULL; 3182 } 3183 } 3184 } 3185 3186 /* Fast paths for floats keeping temporary products in C. 3187 * Assumes all inputs are the same type. 3188 * If the assumption fails, default to use PyObjects instead. 3189 */ 3190 if (PyFloat_CheckExact(result)) { 3191 double f_result = PyFloat_AS_DOUBLE(result); 3192 Py_DECREF(result); 3193 result = NULL; 3194 while(result == NULL) { 3195 item = PyIter_Next(iter); 3196 if (item == NULL) { 3197 Py_DECREF(iter); 3198 if (PyErr_Occurred()) { 3199 return NULL; 3200 } 3201 return PyFloat_FromDouble(f_result); 3202 } 3203 if (PyFloat_CheckExact(item)) { 3204 f_result *= PyFloat_AS_DOUBLE(item); 3205 Py_DECREF(item); 3206 continue; 3207 } 3208 if (PyLong_CheckExact(item)) { 3209 long value; 3210 int overflow; 3211 value = PyLong_AsLongAndOverflow(item, &overflow); 3212 if (!overflow) { 3213 f_result *= (double)value; 3214 Py_DECREF(item); 3215 continue; 3216 } 3217 } 3218 result = PyFloat_FromDouble(f_result); 3219 if (result == NULL) { 3220 Py_DECREF(item); 3221 Py_DECREF(iter); 3222 return NULL; 3223 } 3224 temp = PyNumber_Multiply(result, item); 3225 Py_DECREF(result); 3226 Py_DECREF(item); 3227 result = temp; 3228 if (result == NULL) { 3229 Py_DECREF(iter); 3230 return NULL; 3231 } 3232 } 3233 } 3234#endif 3235 /* Consume rest of the iterable (if any) that could not be handled 3236 * by specialized functions above.*/ 3237 for(;;) { 3238 item = PyIter_Next(iter); 3239 if (item == NULL) { 3240 /* error, or end-of-sequence */ 3241 if (PyErr_Occurred()) { 3242 Py_DECREF(result); 3243 result = NULL; 3244 } 3245 break; 3246 } 3247 temp = PyNumber_Multiply(result, item); 3248 Py_DECREF(result); 3249 Py_DECREF(item); 3250 result = temp; 3251 if (result == NULL) 3252 break; 3253 } 3254 Py_DECREF(iter); 3255 return result; 3256} 3257 3258 3259/* least significant 64 bits of the odd part of factorial(n), for n in range(128). 3260 3261Python code to generate the values: 3262 3263 import math 3264 3265 for n in range(128): 3266 fac = math.factorial(n) 3267 fac_odd_part = fac // (fac & -fac) 3268 reduced_fac_odd_part = fac_odd_part % (2**64) 3269 print(f"{reduced_fac_odd_part:#018x}u") 3270*/ 3271static const uint64_t reduced_factorial_odd_part[] = { 3272 0x0000000000000001u, 0x0000000000000001u, 0x0000000000000001u, 0x0000000000000003u, 3273 0x0000000000000003u, 0x000000000000000fu, 0x000000000000002du, 0x000000000000013bu, 3274 0x000000000000013bu, 0x0000000000000b13u, 0x000000000000375fu, 0x0000000000026115u, 3275 0x000000000007233fu, 0x00000000005cca33u, 0x0000000002898765u, 0x00000000260eeeebu, 3276 0x00000000260eeeebu, 0x0000000286fddd9bu, 0x00000016beecca73u, 0x000001b02b930689u, 3277 0x00000870d9df20adu, 0x0000b141df4dae31u, 0x00079dd498567c1bu, 0x00af2e19afc5266du, 3278 0x020d8a4d0f4f7347u, 0x335281867ec241efu, 0x9b3093d46fdd5923u, 0x5e1f9767cc5866b1u, 3279 0x92dd23d6966aced7u, 0xa30d0f4f0a196e5bu, 0x8dc3e5a1977d7755u, 0x2ab8ce915831734bu, 3280 0x2ab8ce915831734bu, 0x81d2a0bc5e5fdcabu, 0x9efcac82445da75bu, 0xbc8b95cf58cde171u, 3281 0xa0e8444a1f3cecf9u, 0x4191deb683ce3ffdu, 0xddd3878bc84ebfc7u, 0xcb39a64b83ff3751u, 3282 0xf8203f7993fc1495u, 0xbd2a2a78b35f4bddu, 0x84757be6b6d13921u, 0x3fbbcfc0b524988bu, 3283 0xbd11ed47c8928df9u, 0x3c26b59e41c2f4c5u, 0x677a5137e883fdb3u, 0xff74e943b03b93ddu, 3284 0xfe5ebbcb10b2bb97u, 0xb021f1de3235e7e7u, 0x33509eb2e743a58fu, 0x390f9da41279fb7du, 3285 0xe5cb0154f031c559u, 0x93074695ba4ddb6du, 0x81c471caa636247fu, 0xe1347289b5a1d749u, 3286 0x286f21c3f76ce2ffu, 0x00be84a2173e8ac7u, 0x1595065ca215b88bu, 0xf95877595b018809u, 3287 0x9c2efe3c5516f887u, 0x373294604679382bu, 0xaf1ff7a888adcd35u, 0x18ddf279a2c5800bu, 3288 0x18ddf279a2c5800bu, 0x505a90e2542582cbu, 0x5bacad2cd8d5dc2bu, 0xfe3152bcbff89f41u, 3289 0xe1467e88bf829351u, 0xb8001adb9e31b4d5u, 0x2803ac06a0cbb91fu, 0x1904b5d698805799u, 3290 0xe12a648b5c831461u, 0x3516abbd6160cfa9u, 0xac46d25f12fe036du, 0x78bfa1da906b00efu, 3291 0xf6390338b7f111bdu, 0x0f25f80f538255d9u, 0x4ec8ca55b8db140fu, 0x4ff670740b9b30a1u, 3292 0x8fd032443a07f325u, 0x80dfe7965c83eeb5u, 0xa3dc1714d1213afdu, 0x205b7bbfcdc62007u, 3293 0xa78126bbe140a093u, 0x9de1dc61ca7550cfu, 0x84f0046d01b492c5u, 0x2d91810b945de0f3u, 3294 0xf5408b7f6008aa71u, 0x43707f4863034149u, 0xdac65fb9679279d5u, 0xc48406e7d1114eb7u, 3295 0xa7dc9ed3c88e1271u, 0xfb25b2efdb9cb30du, 0x1bebda0951c4df63u, 0x5c85e975580ee5bdu, 3296 0x1591bc60082cb137u, 0x2c38606318ef25d7u, 0x76ca72f7c5c63e27u, 0xf04a75d17baa0915u, 3297 0x77458175139ae30du, 0x0e6c1330bc1b9421u, 0xdf87d2b5797e8293u, 0xefa5c703e1e68925u, 3298 0x2b6b1b3278b4f6e1u, 0xceee27b382394249u, 0xd74e3829f5dab91du, 0xfdb17989c26b5f1fu, 3299 0xc1b7d18781530845u, 0x7b4436b2105a8561u, 0x7ba7c0418372a7d7u, 0x9dbc5c67feb6c639u, 3300 0x502686d7f6ff6b8fu, 0x6101855406be7a1fu, 0x9956afb5806930e7u, 0xe1f0ee88af40f7c5u, 3301 0x984b057bda5c1151u, 0x9a49819acc13ea05u, 0x8ef0dead0896ef27u, 0x71f7826efe292b21u, 3302 0xad80a480e46986efu, 0x01cdc0ebf5e0c6f7u, 0x6e06f839968f68dbu, 0xdd5943ab56e76139u, 3303 0xcdcf31bf8604c5e7u, 0x7e2b4a847054a1cbu, 0x0ca75697a4d3d0f5u, 0x4703f53ac514a98bu, 3304}; 3305 3306/* inverses of reduced_factorial_odd_part values modulo 2**64. 3307 3308Python code to generate the values: 3309 3310 import math 3311 3312 for n in range(128): 3313 fac = math.factorial(n) 3314 fac_odd_part = fac // (fac & -fac) 3315 inverted_fac_odd_part = pow(fac_odd_part, -1, 2**64) 3316 print(f"{inverted_fac_odd_part:#018x}u") 3317*/ 3318static const uint64_t inverted_factorial_odd_part[] = { 3319 0x0000000000000001u, 0x0000000000000001u, 0x0000000000000001u, 0xaaaaaaaaaaaaaaabu, 3320 0xaaaaaaaaaaaaaaabu, 0xeeeeeeeeeeeeeeefu, 0x4fa4fa4fa4fa4fa5u, 0x2ff2ff2ff2ff2ff3u, 3321 0x2ff2ff2ff2ff2ff3u, 0x938cc70553e3771bu, 0xb71c27cddd93e49fu, 0xb38e3229fcdee63du, 3322 0xe684bb63544a4cbfu, 0xc2f684917ca340fbu, 0xf747c9cba417526du, 0xbb26eb51d7bd49c3u, 3323 0xbb26eb51d7bd49c3u, 0xb0a7efb985294093u, 0xbe4b8c69f259eabbu, 0x6854d17ed6dc4fb9u, 3324 0xe1aa904c915f4325u, 0x3b8206df131cead1u, 0x79c6009fea76fe13u, 0xd8c5d381633cd365u, 3325 0x4841f12b21144677u, 0x4a91ff68200b0d0fu, 0x8f9513a58c4f9e8bu, 0x2b3e690621a42251u, 3326 0x4f520f00e03c04e7u, 0x2edf84ee600211d3u, 0xadcaa2764aaacdfdu, 0x161f4f9033f4fe63u, 3327 0x161f4f9033f4fe63u, 0xbada2932ea4d3e03u, 0xcec189f3efaa30d3u, 0xf7475bb68330bf91u, 3328 0x37eb7bf7d5b01549u, 0x46b35660a4e91555u, 0xa567c12d81f151f7u, 0x4c724007bb2071b1u, 3329 0x0f4a0cce58a016bdu, 0xfa21068e66106475u, 0x244ab72b5a318ae1u, 0x366ce67e080d0f23u, 3330 0xd666fdae5dd2a449u, 0xd740ddd0acc06a0du, 0xb050bbbb28e6f97bu, 0x70b003fe890a5c75u, 3331 0xd03aabff83037427u, 0x13ec4ca72c783bd7u, 0x90282c06afdbd96fu, 0x4414ddb9db4a95d5u, 3332 0xa2c68735ae6832e9u, 0xbf72d71455676665u, 0xa8469fab6b759b7fu, 0xc1e55b56e606caf9u, 3333 0x40455630fc4a1cffu, 0x0120a7b0046d16f7u, 0xa7c3553b08faef23u, 0x9f0bfd1b08d48639u, 3334 0xa433ffce9a304d37u, 0xa22ad1d53915c683u, 0xcb6cbc723ba5dd1du, 0x547fb1b8ab9d0ba3u, 3335 0x547fb1b8ab9d0ba3u, 0x8f15a826498852e3u, 0x32e1a03f38880283u, 0x3de4cce63283f0c1u, 3336 0x5dfe6667e4da95b1u, 0xfda6eeeef479e47du, 0xf14de991cc7882dfu, 0xe68db79247630ca9u, 3337 0xa7d6db8207ee8fa1u, 0x255e1f0fcf034499u, 0xc9a8990e43dd7e65u, 0x3279b6f289702e0fu, 3338 0xe7b5905d9b71b195u, 0x03025ba41ff0da69u, 0xb7df3d6d3be55aefu, 0xf89b212ebff2b361u, 3339 0xfe856d095996f0adu, 0xd6e533e9fdf20f9du, 0xf8c0e84a63da3255u, 0xa677876cd91b4db7u, 3340 0x07ed4f97780d7d9bu, 0x90a8705f258db62fu, 0xa41bbb2be31b1c0du, 0x6ec28690b038383bu, 3341 0xdb860c3bb2edd691u, 0x0838286838a980f9u, 0x558417a74b36f77du, 0x71779afc3646ef07u, 3342 0x743cda377ccb6e91u, 0x7fdf9f3fe89153c5u, 0xdc97d25df49b9a4bu, 0x76321a778eb37d95u, 3343 0x7cbb5e27da3bd487u, 0x9cff4ade1a009de7u, 0x70eb166d05c15197u, 0xdcf0460b71d5fe3du, 3344 0x5ac1ee5260b6a3c5u, 0xc922dedfdd78efe1u, 0xe5d381dc3b8eeb9bu, 0xd57e5347bafc6aadu, 3345 0x86939040983acd21u, 0x395b9d69740a4ff9u, 0x1467299c8e43d135u, 0x5fe440fcad975cdfu, 3346 0xcaa9a39794a6ca8du, 0xf61dbd640868dea1u, 0xac09d98d74843be7u, 0x2b103b9e1a6b4809u, 3347 0x2ab92d16960f536fu, 0x6653323d5e3681dfu, 0xefd48c1c0624e2d7u, 0xa496fefe04816f0du, 3348 0x1754a7b07bbdd7b1u, 0x23353c829a3852cdu, 0xbf831261abd59097u, 0x57a8e656df0618e1u, 3349 0x16e9206c3100680fu, 0xadad4c6ee921dac7u, 0x635f2b3860265353u, 0xdd6d0059f44b3d09u, 3350 0xac4dd6b894447dd7u, 0x42ea183eeaa87be3u, 0x15612d1550ee5b5du, 0x226fa19d656cb623u, 3351}; 3352 3353/* exponent of the largest power of 2 dividing factorial(n), for n in range(68) 3354 3355Python code to generate the values: 3356 3357import math 3358 3359for n in range(128): 3360 fac = math.factorial(n) 3361 fac_trailing_zeros = (fac & -fac).bit_length() - 1 3362 print(fac_trailing_zeros) 3363*/ 3364 3365static const uint8_t factorial_trailing_zeros[] = { 3366 0, 0, 1, 1, 3, 3, 4, 4, 7, 7, 8, 8, 10, 10, 11, 11, // 0-15 3367 15, 15, 16, 16, 18, 18, 19, 19, 22, 22, 23, 23, 25, 25, 26, 26, // 16-31 3368 31, 31, 32, 32, 34, 34, 35, 35, 38, 38, 39, 39, 41, 41, 42, 42, // 32-47 3369 46, 46, 47, 47, 49, 49, 50, 50, 53, 53, 54, 54, 56, 56, 57, 57, // 48-63 3370 63, 63, 64, 64, 66, 66, 67, 67, 70, 70, 71, 71, 73, 73, 74, 74, // 64-79 3371 78, 78, 79, 79, 81, 81, 82, 82, 85, 85, 86, 86, 88, 88, 89, 89, // 80-95 3372 94, 94, 95, 95, 97, 97, 98, 98, 101, 101, 102, 102, 104, 104, 105, 105, // 96-111 3373 109, 109, 110, 110, 112, 112, 113, 113, 116, 116, 117, 117, 119, 119, 120, 120, // 112-127 3374}; 3375 3376/* Number of permutations and combinations. 3377 * P(n, k) = n! / (n-k)! 3378 * C(n, k) = P(n, k) / k! 3379 */ 3380 3381/* Calculate C(n, k) for n in the 63-bit range. */ 3382static PyObject * 3383perm_comb_small(unsigned long long n, unsigned long long k, int iscomb) 3384{ 3385 if (k == 0) { 3386 return PyLong_FromLong(1); 3387 } 3388 3389 /* For small enough n and k the result fits in the 64-bit range and can 3390 * be calculated without allocating intermediate PyLong objects. */ 3391 if (iscomb) { 3392 /* Maps k to the maximal n so that 2*k-1 <= n <= 127 and C(n, k) 3393 * fits into a uint64_t. Exclude k = 1, because the second fast 3394 * path is faster for this case.*/ 3395 static const unsigned char fast_comb_limits1[] = { 3396 0, 0, 127, 127, 127, 127, 127, 127, // 0-7 3397 127, 127, 127, 127, 127, 127, 127, 127, // 8-15 3398 116, 105, 97, 91, 86, 82, 78, 76, // 16-23 3399 74, 72, 71, 70, 69, 68, 68, 67, // 24-31 3400 67, 67, 67, // 32-34 3401 }; 3402 if (k < Py_ARRAY_LENGTH(fast_comb_limits1) && n <= fast_comb_limits1[k]) { 3403 /* 3404 comb(n, k) fits into a uint64_t. We compute it as 3405 3406 comb_odd_part << shift 3407 3408 where 2**shift is the largest power of two dividing comb(n, k) 3409 and comb_odd_part is comb(n, k) >> shift. comb_odd_part can be 3410 calculated efficiently via arithmetic modulo 2**64, using three 3411 lookups and two uint64_t multiplications. 3412 */ 3413 uint64_t comb_odd_part = reduced_factorial_odd_part[n] 3414 * inverted_factorial_odd_part[k] 3415 * inverted_factorial_odd_part[n - k]; 3416 int shift = factorial_trailing_zeros[n] 3417 - factorial_trailing_zeros[k] 3418 - factorial_trailing_zeros[n - k]; 3419 return PyLong_FromUnsignedLongLong(comb_odd_part << shift); 3420 } 3421 3422 /* Maps k to the maximal n so that 2*k-1 <= n <= 127 and C(n, k)*k 3423 * fits into a long long (which is at least 64 bit). Only contains 3424 * items larger than in fast_comb_limits1. */ 3425 static const unsigned long long fast_comb_limits2[] = { 3426 0, ULLONG_MAX, 4294967296ULL, 3329022, 102570, 13467, 3612, 1449, // 0-7 3427 746, 453, 308, 227, 178, 147, // 8-13 3428 }; 3429 if (k < Py_ARRAY_LENGTH(fast_comb_limits2) && n <= fast_comb_limits2[k]) { 3430 /* C(n, k) = C(n, k-1) * (n-k+1) / k */ 3431 unsigned long long result = n; 3432 for (unsigned long long i = 1; i < k;) { 3433 result *= --n; 3434 result /= ++i; 3435 } 3436 return PyLong_FromUnsignedLongLong(result); 3437 } 3438 } 3439 else { 3440 /* Maps k to the maximal n so that k <= n and P(n, k) 3441 * fits into a long long (which is at least 64 bit). */ 3442 static const unsigned long long fast_perm_limits[] = { 3443 0, ULLONG_MAX, 4294967296ULL, 2642246, 65537, 7133, 1627, 568, // 0-7 3444 259, 142, 88, 61, 45, 36, 30, 26, // 8-15 3445 24, 22, 21, 20, 20, // 16-20 3446 }; 3447 if (k < Py_ARRAY_LENGTH(fast_perm_limits) && n <= fast_perm_limits[k]) { 3448 if (n <= 127) { 3449 /* P(n, k) fits into a uint64_t. */ 3450 uint64_t perm_odd_part = reduced_factorial_odd_part[n] 3451 * inverted_factorial_odd_part[n - k]; 3452 int shift = factorial_trailing_zeros[n] 3453 - factorial_trailing_zeros[n - k]; 3454 return PyLong_FromUnsignedLongLong(perm_odd_part << shift); 3455 } 3456 3457 /* P(n, k) = P(n, k-1) * (n-k+1) */ 3458 unsigned long long result = n; 3459 for (unsigned long long i = 1; i < k;) { 3460 result *= --n; 3461 ++i; 3462 } 3463 return PyLong_FromUnsignedLongLong(result); 3464 } 3465 } 3466 3467 /* For larger n use recursive formulas: 3468 * 3469 * P(n, k) = P(n, j) * P(n-j, k-j) 3470 * C(n, k) = C(n, j) * C(n-j, k-j) // C(k, j) 3471 */ 3472 unsigned long long j = k / 2; 3473 PyObject *a, *b; 3474 a = perm_comb_small(n, j, iscomb); 3475 if (a == NULL) { 3476 return NULL; 3477 } 3478 b = perm_comb_small(n - j, k - j, iscomb); 3479 if (b == NULL) { 3480 goto error; 3481 } 3482 Py_SETREF(a, PyNumber_Multiply(a, b)); 3483 Py_DECREF(b); 3484 if (iscomb && a != NULL) { 3485 b = perm_comb_small(k, j, 1); 3486 if (b == NULL) { 3487 goto error; 3488 } 3489 Py_SETREF(a, PyNumber_FloorDivide(a, b)); 3490 Py_DECREF(b); 3491 } 3492 return a; 3493 3494error: 3495 Py_DECREF(a); 3496 return NULL; 3497} 3498 3499/* Calculate P(n, k) or C(n, k) using recursive formulas. 3500 * It is more efficient than sequential multiplication thanks to 3501 * Karatsuba multiplication. 3502 */ 3503static PyObject * 3504perm_comb(PyObject *n, unsigned long long k, int iscomb) 3505{ 3506 if (k == 0) { 3507 return PyLong_FromLong(1); 3508 } 3509 if (k == 1) { 3510 Py_INCREF(n); 3511 return n; 3512 } 3513 3514 /* P(n, k) = P(n, j) * P(n-j, k-j) */ 3515 /* C(n, k) = C(n, j) * C(n-j, k-j) // C(k, j) */ 3516 unsigned long long j = k / 2; 3517 PyObject *a, *b; 3518 a = perm_comb(n, j, iscomb); 3519 if (a == NULL) { 3520 return NULL; 3521 } 3522 PyObject *t = PyLong_FromUnsignedLongLong(j); 3523 if (t == NULL) { 3524 goto error; 3525 } 3526 n = PyNumber_Subtract(n, t); 3527 Py_DECREF(t); 3528 if (n == NULL) { 3529 goto error; 3530 } 3531 b = perm_comb(n, k - j, iscomb); 3532 Py_DECREF(n); 3533 if (b == NULL) { 3534 goto error; 3535 } 3536 Py_SETREF(a, PyNumber_Multiply(a, b)); 3537 Py_DECREF(b); 3538 if (iscomb && a != NULL) { 3539 b = perm_comb_small(k, j, 1); 3540 if (b == NULL) { 3541 goto error; 3542 } 3543 Py_SETREF(a, PyNumber_FloorDivide(a, b)); 3544 Py_DECREF(b); 3545 } 3546 return a; 3547 3548error: 3549 Py_DECREF(a); 3550 return NULL; 3551} 3552 3553/*[clinic input] 3554math.perm 3555 3556 n: object 3557 k: object = None 3558 / 3559 3560Number of ways to choose k items from n items without repetition and with order. 3561 3562Evaluates to n! / (n - k)! when k <= n and evaluates 3563to zero when k > n. 3564 3565If k is not specified or is None, then k defaults to n 3566and the function returns n!. 3567 3568Raises TypeError if either of the arguments are not integers. 3569Raises ValueError if either of the arguments are negative. 3570[clinic start generated code]*/ 3571 3572static PyObject * 3573math_perm_impl(PyObject *module, PyObject *n, PyObject *k) 3574/*[clinic end generated code: output=e021a25469653e23 input=5311c5a00f359b53]*/ 3575{ 3576 PyObject *result = NULL; 3577 int overflow, cmp; 3578 long long ki, ni; 3579 3580 if (k == Py_None) { 3581 return math_factorial(module, n); 3582 } 3583 n = PyNumber_Index(n); 3584 if (n == NULL) { 3585 return NULL; 3586 } 3587 k = PyNumber_Index(k); 3588 if (k == NULL) { 3589 Py_DECREF(n); 3590 return NULL; 3591 } 3592 assert(PyLong_CheckExact(n) && PyLong_CheckExact(k)); 3593 3594 if (Py_SIZE(n) < 0) { 3595 PyErr_SetString(PyExc_ValueError, 3596 "n must be a non-negative integer"); 3597 goto error; 3598 } 3599 if (Py_SIZE(k) < 0) { 3600 PyErr_SetString(PyExc_ValueError, 3601 "k must be a non-negative integer"); 3602 goto error; 3603 } 3604 3605 cmp = PyObject_RichCompareBool(n, k, Py_LT); 3606 if (cmp != 0) { 3607 if (cmp > 0) { 3608 result = PyLong_FromLong(0); 3609 goto done; 3610 } 3611 goto error; 3612 } 3613 3614 ki = PyLong_AsLongLongAndOverflow(k, &overflow); 3615 assert(overflow >= 0 && !PyErr_Occurred()); 3616 if (overflow > 0) { 3617 PyErr_Format(PyExc_OverflowError, 3618 "k must not exceed %lld", 3619 LLONG_MAX); 3620 goto error; 3621 } 3622 assert(ki >= 0); 3623 3624 ni = PyLong_AsLongLongAndOverflow(n, &overflow); 3625 assert(overflow >= 0 && !PyErr_Occurred()); 3626 if (!overflow && ki > 1) { 3627 assert(ni >= 0); 3628 result = perm_comb_small((unsigned long long)ni, 3629 (unsigned long long)ki, 0); 3630 } 3631 else { 3632 result = perm_comb(n, (unsigned long long)ki, 0); 3633 } 3634 3635done: 3636 Py_DECREF(n); 3637 Py_DECREF(k); 3638 return result; 3639 3640error: 3641 Py_DECREF(n); 3642 Py_DECREF(k); 3643 return NULL; 3644} 3645 3646/*[clinic input] 3647math.comb 3648 3649 n: object 3650 k: object 3651 / 3652 3653Number of ways to choose k items from n items without repetition and without order. 3654 3655Evaluates to n! / (k! * (n - k)!) when k <= n and evaluates 3656to zero when k > n. 3657 3658Also called the binomial coefficient because it is equivalent 3659to the coefficient of k-th term in polynomial expansion of the 3660expression (1 + x)**n. 3661 3662Raises TypeError if either of the arguments are not integers. 3663Raises ValueError if either of the arguments are negative. 3664 3665[clinic start generated code]*/ 3666 3667static PyObject * 3668math_comb_impl(PyObject *module, PyObject *n, PyObject *k) 3669/*[clinic end generated code: output=bd2cec8d854f3493 input=9a05315af2518709]*/ 3670{ 3671 PyObject *result = NULL, *temp; 3672 int overflow, cmp; 3673 long long ki, ni; 3674 3675 n = PyNumber_Index(n); 3676 if (n == NULL) { 3677 return NULL; 3678 } 3679 k = PyNumber_Index(k); 3680 if (k == NULL) { 3681 Py_DECREF(n); 3682 return NULL; 3683 } 3684 assert(PyLong_CheckExact(n) && PyLong_CheckExact(k)); 3685 3686 if (Py_SIZE(n) < 0) { 3687 PyErr_SetString(PyExc_ValueError, 3688 "n must be a non-negative integer"); 3689 goto error; 3690 } 3691 if (Py_SIZE(k) < 0) { 3692 PyErr_SetString(PyExc_ValueError, 3693 "k must be a non-negative integer"); 3694 goto error; 3695 } 3696 3697 ni = PyLong_AsLongLongAndOverflow(n, &overflow); 3698 assert(overflow >= 0 && !PyErr_Occurred()); 3699 if (!overflow) { 3700 assert(ni >= 0); 3701 ki = PyLong_AsLongLongAndOverflow(k, &overflow); 3702 assert(overflow >= 0 && !PyErr_Occurred()); 3703 if (overflow || ki > ni) { 3704 result = PyLong_FromLong(0); 3705 goto done; 3706 } 3707 assert(ki >= 0); 3708 3709 ki = Py_MIN(ki, ni - ki); 3710 if (ki > 1) { 3711 result = perm_comb_small((unsigned long long)ni, 3712 (unsigned long long)ki, 1); 3713 goto done; 3714 } 3715 /* For k == 1 just return the original n in perm_comb(). */ 3716 } 3717 else { 3718 /* k = min(k, n - k) */ 3719 temp = PyNumber_Subtract(n, k); 3720 if (temp == NULL) { 3721 goto error; 3722 } 3723 if (Py_SIZE(temp) < 0) { 3724 Py_DECREF(temp); 3725 result = PyLong_FromLong(0); 3726 goto done; 3727 } 3728 cmp = PyObject_RichCompareBool(temp, k, Py_LT); 3729 if (cmp > 0) { 3730 Py_SETREF(k, temp); 3731 } 3732 else { 3733 Py_DECREF(temp); 3734 if (cmp < 0) { 3735 goto error; 3736 } 3737 } 3738 3739 ki = PyLong_AsLongLongAndOverflow(k, &overflow); 3740 assert(overflow >= 0 && !PyErr_Occurred()); 3741 if (overflow) { 3742 PyErr_Format(PyExc_OverflowError, 3743 "min(n - k, k) must not exceed %lld", 3744 LLONG_MAX); 3745 goto error; 3746 } 3747 assert(ki >= 0); 3748 } 3749 3750 result = perm_comb(n, (unsigned long long)ki, 1); 3751 3752done: 3753 Py_DECREF(n); 3754 Py_DECREF(k); 3755 return result; 3756 3757error: 3758 Py_DECREF(n); 3759 Py_DECREF(k); 3760 return NULL; 3761} 3762 3763 3764/*[clinic input] 3765math.nextafter 3766 3767 x: double 3768 y: double 3769 / 3770 3771Return the next floating-point value after x towards y. 3772[clinic start generated code]*/ 3773 3774static PyObject * 3775math_nextafter_impl(PyObject *module, double x, double y) 3776/*[clinic end generated code: output=750c8266c1c540ce input=02b2d50cd1d9f9b6]*/ 3777{ 3778#if defined(_AIX) 3779 if (x == y) { 3780 /* On AIX 7.1, libm nextafter(-0.0, +0.0) returns -0.0. 3781 Bug fixed in bos.adt.libm 7.2.2.0 by APAR IV95512. */ 3782 return PyFloat_FromDouble(y); 3783 } 3784 if (Py_IS_NAN(x)) { 3785 return PyFloat_FromDouble(x); 3786 } 3787 if (Py_IS_NAN(y)) { 3788 return PyFloat_FromDouble(y); 3789 } 3790#endif 3791 return PyFloat_FromDouble(nextafter(x, y)); 3792} 3793 3794 3795/*[clinic input] 3796math.ulp -> double 3797 3798 x: double 3799 / 3800 3801Return the value of the least significant bit of the float x. 3802[clinic start generated code]*/ 3803 3804static double 3805math_ulp_impl(PyObject *module, double x) 3806/*[clinic end generated code: output=f5207867a9384dd4 input=31f9bfbbe373fcaa]*/ 3807{ 3808 if (Py_IS_NAN(x)) { 3809 return x; 3810 } 3811 x = fabs(x); 3812 if (Py_IS_INFINITY(x)) { 3813 return x; 3814 } 3815 double inf = m_inf(); 3816 double x2 = nextafter(x, inf); 3817 if (Py_IS_INFINITY(x2)) { 3818 /* special case: x is the largest positive representable float */ 3819 x2 = nextafter(x, -inf); 3820 return x - x2; 3821 } 3822 return x2 - x; 3823} 3824 3825static int 3826math_exec(PyObject *module) 3827{ 3828 if (PyModule_AddObject(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) { 3829 return -1; 3830 } 3831 if (PyModule_AddObject(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) { 3832 return -1; 3833 } 3834 // 2pi 3835 if (PyModule_AddObject(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) { 3836 return -1; 3837 } 3838 if (PyModule_AddObject(module, "inf", PyFloat_FromDouble(m_inf())) < 0) { 3839 return -1; 3840 } 3841#if _PY_SHORT_FLOAT_REPR == 1 3842 if (PyModule_AddObject(module, "nan", PyFloat_FromDouble(m_nan())) < 0) { 3843 return -1; 3844 } 3845#endif 3846 return 0; 3847} 3848 3849static PyMethodDef math_methods[] = { 3850 {"acos", math_acos, METH_O, math_acos_doc}, 3851 {"acosh", math_acosh, METH_O, math_acosh_doc}, 3852 {"asin", math_asin, METH_O, math_asin_doc}, 3853 {"asinh", math_asinh, METH_O, math_asinh_doc}, 3854 {"atan", math_atan, METH_O, math_atan_doc}, 3855 {"atan2", _PyCFunction_CAST(math_atan2), METH_FASTCALL, math_atan2_doc}, 3856 {"atanh", math_atanh, METH_O, math_atanh_doc}, 3857 {"cbrt", math_cbrt, METH_O, math_cbrt_doc}, 3858 MATH_CEIL_METHODDEF 3859 {"copysign", _PyCFunction_CAST(math_copysign), METH_FASTCALL, math_copysign_doc}, 3860 {"cos", math_cos, METH_O, math_cos_doc}, 3861 {"cosh", math_cosh, METH_O, math_cosh_doc}, 3862 MATH_DEGREES_METHODDEF 3863 MATH_DIST_METHODDEF 3864 {"erf", math_erf, METH_O, math_erf_doc}, 3865 {"erfc", math_erfc, METH_O, math_erfc_doc}, 3866 {"exp", math_exp, METH_O, math_exp_doc}, 3867 {"exp2", math_exp2, METH_O, math_exp2_doc}, 3868 {"expm1", math_expm1, METH_O, math_expm1_doc}, 3869 {"fabs", math_fabs, METH_O, math_fabs_doc}, 3870 MATH_FACTORIAL_METHODDEF 3871 MATH_FLOOR_METHODDEF 3872 MATH_FMOD_METHODDEF 3873 MATH_FREXP_METHODDEF 3874 MATH_FSUM_METHODDEF 3875 {"gamma", math_gamma, METH_O, math_gamma_doc}, 3876 {"gcd", _PyCFunction_CAST(math_gcd), METH_FASTCALL, math_gcd_doc}, 3877 {"hypot", _PyCFunction_CAST(math_hypot), METH_FASTCALL, math_hypot_doc}, 3878 MATH_ISCLOSE_METHODDEF 3879 MATH_ISFINITE_METHODDEF 3880 MATH_ISINF_METHODDEF 3881 MATH_ISNAN_METHODDEF 3882 MATH_ISQRT_METHODDEF 3883 {"lcm", _PyCFunction_CAST(math_lcm), METH_FASTCALL, math_lcm_doc}, 3884 MATH_LDEXP_METHODDEF 3885 {"lgamma", math_lgamma, METH_O, math_lgamma_doc}, 3886 MATH_LOG_METHODDEF 3887 {"log1p", math_log1p, METH_O, math_log1p_doc}, 3888 MATH_LOG10_METHODDEF 3889 MATH_LOG2_METHODDEF 3890 MATH_MODF_METHODDEF 3891 MATH_POW_METHODDEF 3892 MATH_RADIANS_METHODDEF 3893 {"remainder", _PyCFunction_CAST(math_remainder), METH_FASTCALL, math_remainder_doc}, 3894 {"sin", math_sin, METH_O, math_sin_doc}, 3895 {"sinh", math_sinh, METH_O, math_sinh_doc}, 3896 {"sqrt", math_sqrt, METH_O, math_sqrt_doc}, 3897 {"tan", math_tan, METH_O, math_tan_doc}, 3898 {"tanh", math_tanh, METH_O, math_tanh_doc}, 3899 MATH_TRUNC_METHODDEF 3900 MATH_PROD_METHODDEF 3901 MATH_PERM_METHODDEF 3902 MATH_COMB_METHODDEF 3903 MATH_NEXTAFTER_METHODDEF 3904 MATH_ULP_METHODDEF 3905 {NULL, NULL} /* sentinel */ 3906}; 3907 3908static PyModuleDef_Slot math_slots[] = { 3909 {Py_mod_exec, math_exec}, 3910 {0, NULL} 3911}; 3912 3913PyDoc_STRVAR(module_doc, 3914"This module provides access to the mathematical functions\n" 3915"defined by the C standard."); 3916 3917static struct PyModuleDef mathmodule = { 3918 PyModuleDef_HEAD_INIT, 3919 .m_name = "math", 3920 .m_doc = module_doc, 3921 .m_size = 0, 3922 .m_methods = math_methods, 3923 .m_slots = math_slots, 3924}; 3925 3926PyMODINIT_FUNC 3927PyInit_math(void) 3928{ 3929 return PyModuleDef_Init(&mathmodule); 3930} 3931