(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
# 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);
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.
#include <io.h>
-#define HAVE_HYPOT
#define HAVE_STRFTIME
#define DONT_HAVE_SIG_ALARM
#define DONT_HAVE_SIG_PAUSE
/* 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. */
__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 */
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"
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"
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,
/* 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
/* 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
/* 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