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