bpo-36106: Resolve sinpi name clash with libm (IEEE-754 violation). (GH-12027)
The standard math library (libm) may follow IEEE-754 recommendation to include an implementation of sinPi(), i.e. sinPi(x):=sin(pi*x). And this triggers a name clash, found by FreeBSD developer Steve Kargl, who worken on putting sinpi into libm used on FreeBSD (it has to be named "sinpi", not "sinPi", cf. e.g. https://en.cppreference.com/w/c/experimental/fpext4).
This commit is contained in:
parent
ff3d39faa8
commit
f57cd8288d
|
@ -0,0 +1 @@
|
|||
Resolve potential name clash with libm's sinpi(). Patch by Dmitrii Pasechnik.
|
|
@ -100,7 +100,7 @@ static const double sqrtpi = 1.772453850905516027298167483341145182798;
|
|||
}
|
||||
|
||||
static double
|
||||
sinpi(double x)
|
||||
m_sinpi(double x)
|
||||
{
|
||||
double y, r;
|
||||
int n;
|
||||
|
@ -328,7 +328,7 @@ m_tgamma(double x)
|
|||
integer. */
|
||||
if (absx > 200.0) {
|
||||
if (x < 0.0) {
|
||||
return 0.0/sinpi(x);
|
||||
return 0.0/m_sinpi(x);
|
||||
}
|
||||
else {
|
||||
errno = ERANGE;
|
||||
|
@ -352,7 +352,7 @@ m_tgamma(double x)
|
|||
}
|
||||
z = z * lanczos_g / y;
|
||||
if (x < 0.0) {
|
||||
r = -pi / sinpi(absx) / absx * exp(y) / lanczos_sum(absx);
|
||||
r = -pi / m_sinpi(absx) / absx * exp(y) / lanczos_sum(absx);
|
||||
r -= z * r;
|
||||
if (absx < 140.0) {
|
||||
r /= pow(y, absx - 0.5);
|
||||
|
@ -423,7 +423,7 @@ m_lgamma(double x)
|
|||
r += (absx - 0.5) * (log(absx + lanczos_g - 0.5) - 1);
|
||||
if (x < 0.0)
|
||||
/* Use reflection formula to get value for negative x. */
|
||||
r = logpi - log(fabs(sinpi(absx))) - log(absx) - r;
|
||||
r = logpi - log(fabs(m_sinpi(absx))) - log(absx) - r;
|
||||
if (Py_IS_INFINITY(r))
|
||||
errno = ERANGE;
|
||||
return r;
|
||||
|
|
Loading…
Reference in New Issue