Thanks to visit codestin.com
Credit goes to github.com

Skip to content

bpo-45440: Remove pymath.c fallbacks #28977

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,8 @@ Build Changes
(Contributed by Mike Gilbert in :issue:`45433`.)

* Building Python now requires a C99 ``<math.h>`` header file providing
``isinf()``, ``isnan()`` and ``isfinite()`` functions.
the following functions: ``copysign()``, ``hypot()``, ``isfinite()``,
``isinf()``, ``isnan()``, ``round()``.
(Contributed by Victor Stinner in :issue:`45440`.)

C API Changes
Expand Down
18 changes: 0 additions & 18 deletions Include/internal/pycore_pymath.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,6 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif


// Python provides implementations for copysign(), round() and hypot() in
// Python/pymath.c just in case your math library doesn't provide the
// functions.
//
// Note: PC/pyconfig.h defines copysign as _copysign
#ifndef HAVE_COPYSIGN
extern double copysign(double, double);
#endif

#ifndef HAVE_ROUND
extern double round(double);
#endif

#ifndef HAVE_HYPOT
extern double hypot(double, double);
#endif

// Extra declarations
#if !defined(_MSC_VER) && !defined(__STDC__)
extern double fmod (double, double);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
Building Python now requires a C99 ``<math.h>`` header file providing
``isinf()``, ``isnan()`` and ``isfinite()`` functions. Patch by Victor Stinner.
the following functions: ``copysign()``, ``hypot()``, ``isfinite()``,
``isinf()``, ``isnan()``, ``round()``.
Patch by Victor Stinner.
9 changes: 0 additions & 9 deletions PC/pyconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ WIN32 is still required for the locale module.

#include <io.h>

#define HAVE_HYPOT
#define HAVE_STRFTIME
#define DONT_HAVE_SIG_ALARM
#define DONT_HAVE_SIG_PAUSE
Expand Down Expand Up @@ -348,14 +347,6 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */

/* Fairly standard from here! */

/* Define to 1 if you have the `copysign' function. */
#define HAVE_COPYSIGN 1

/* Define to 1 if you have the `round' function. */
#if _MSC_VER >= 1800
# define HAVE_ROUND 1
#endif

/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
Expand Down
48 changes: 0 additions & 48 deletions Python/pymath.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,51 +17,3 @@ void _Py_set_387controlword(unsigned short cw) {
__asm__ __volatile__ ("fldcw %0" : : "m" (cw));
}
#endif // HAVE_GCC_ASM_FOR_X87


#ifndef HAVE_HYPOT
double hypot(double x, double y)
{
double yx;

x = fabs(x);
y = fabs(y);
if (x < y) {
double temp = x;
x = y;
y = temp;
}
if (x == 0.)
return 0.;
else {
yx = y/x;
return x*sqrt(1.+yx*yx);
}
}
#endif /* HAVE_HYPOT */

#ifndef HAVE_COPYSIGN
double
copysign(double x, double y)
{
/* use atan2 to distinguish -0. from 0. */
if (y > 0. || (y == 0. && atan2(y, -1.) > 0.)) {
return fabs(x);
} else {
return -fabs(x);
}
}
#endif /* HAVE_COPYSIGN */

#ifndef HAVE_ROUND
double
round(double x)
{
double absx, y;
absx = fabs(x);
y = floor(absx);
if (absx - y >= 0.5)
y += 1.0;
return copysign(y, x);
}
#endif /* HAVE_ROUND */
4 changes: 2 additions & 2 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -15066,7 +15066,7 @@ fi
LIBS_SAVE=$LIBS
LIBS="$LIBS $LIBM"

for ac_func in acosh asinh atanh copysign erf erfc expm1 finite gamma
for ac_func in acosh asinh atanh erf erfc expm1 finite gamma
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
Expand All @@ -15078,7 +15078,7 @@ _ACEOF
fi
done

for ac_func in hypot lgamma log1p log2 round tgamma
for ac_func in lgamma log1p log2 tgamma
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
Expand Down
4 changes: 2 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -4675,8 +4675,8 @@ fi
LIBS_SAVE=$LIBS
LIBS="$LIBS $LIBM"

AC_CHECK_FUNCS([acosh asinh atanh copysign erf erfc expm1 finite gamma])
AC_CHECK_FUNCS([hypot lgamma log1p log2 round tgamma])
AC_CHECK_FUNCS([acosh asinh atanh erf erfc expm1 finite gamma])
AC_CHECK_FUNCS([lgamma log1p log2 tgamma])

# For multiprocessing module, check that sem_open
# actually works. For FreeBSD versions <= 7.2,
Expand Down
9 changes: 0 additions & 9 deletions pyconfig.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,6 @@
/* Define to 1 if you have the <conio.h> header file. */
#undef HAVE_CONIO_H

/* Define to 1 if you have the `copysign' function. */
#undef HAVE_COPYSIGN

/* Define to 1 if you have the `copy_file_range' function. */
#undef HAVE_COPY_FILE_RANGE

Expand Down Expand Up @@ -538,9 +535,6 @@
/* Define this if you have le64toh() */
#undef HAVE_HTOLE64

/* Define to 1 if you have the `hypot' function. */
#undef HAVE_HYPOT

/* Define to 1 if you have the <ieeefp.h> header file. */
#undef HAVE_IEEEFP_H

Expand Down Expand Up @@ -872,9 +866,6 @@
/* Define if you have readline 4.0 */
#undef HAVE_RL_RESIZE_TERMINAL

/* Define to 1 if you have the `round' function. */
#undef HAVE_ROUND

/* Define to 1 if you have the `rtpSpawn' function. */
#undef HAVE_RTPSPAWN

Expand Down