Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
gh-120026: deprecate (soft) Py_HUGE_VAL macro
  • Loading branch information
skirpichev committed Jun 4, 2024
commit 5b7bc648e899007e03b29d59e123e07b06a30b76
2 changes: 1 addition & 1 deletion Doc/c-api/conversion.rst
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ The following functions provide locale-independent string to number conversions.

If ``s`` represents a value that is too large to store in a float
(for example, ``"1e500"`` is such a string on many platforms) then
if ``overflow_exception`` is ``NULL`` return ``Py_HUGE_VAL`` (with
if ``overflow_exception`` is ``NULL`` return ``Py_INFINITY`` (with
an appropriate sign) and don't set any exception. Otherwise,
``overflow_exception`` must point to a Python exception object;
raise that exception and return ``-1.0``. In both cases, set
Expand Down
4 changes: 4 additions & 0 deletions Doc/whatsnew/3.14.rst
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,10 @@ Deprecated
:c:macro:`!isfinite` available from :file:`math.h`
since C99. (Contributed by Sergey B Kirpichev in :gh:`119613`.)

* Macro :c:macro:`!Py_HUGE_VAL` is :term:`soft deprecated`, use instead
:c:macro:`!Py_INFINITY`. (Contributed by Sergey B Kirpichev in
:gh:`120026`.)
Comment thread
skirpichev marked this conversation as resolved.
Outdated

Removed
-------

Expand Down
4 changes: 2 additions & 2 deletions Include/floatobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ PyAPI_DATA(PyTypeObject) PyFloat_Type;
#define Py_RETURN_INF(sign) \
do { \
if (copysign(1., sign) == 1.) { \
return PyFloat_FromDouble(Py_HUGE_VAL); \
return PyFloat_FromDouble(Py_INFINITY); \
} \
else { \
return PyFloat_FromDouble(-Py_HUGE_VAL); \
return PyFloat_FromDouble(-Py_INFINITY); \
} \
} while(0)

Expand Down
6 changes: 3 additions & 3 deletions Include/internal/pycore_pymath.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ extern "C" {
static inline void _Py_ADJUST_ERANGE1(double x)
{
if (errno == 0) {
if (x == Py_HUGE_VAL || x == -Py_HUGE_VAL) {
if (x == Py_INFINITY || x == -Py_INFINITY) {
errno = ERANGE;
}
}
Expand All @@ -44,8 +44,8 @@ static inline void _Py_ADJUST_ERANGE1(double x)

static inline void _Py_ADJUST_ERANGE2(double x, double y)
{
if (x == Py_HUGE_VAL || x == -Py_HUGE_VAL ||
y == Py_HUGE_VAL || y == -Py_HUGE_VAL)
if (x == Py_INFINITY || x == -Py_INFINITY ||
y == Py_INFINITY || y == -Py_INFINITY)
{
if (errno == 0) {
errno = ERANGE;
Expand Down
2 changes: 1 addition & 1 deletion Include/pymath.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@

/* Py_HUGE_VAL should always be the same as Py_INFINITY. But historically
* this was not reliable and Python did not require IEEE floats and C99
* conformity. Prefer Py_INFINITY for new code.
* conformity. Soft deprecated since Python 3.14, use Py_INFINITY instead.
Comment thread
skirpichev marked this conversation as resolved.
Outdated
*/
#ifndef Py_HUGE_VAL
# define Py_HUGE_VAL HUGE_VAL
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Macro :c:macro:`!Py_HUGE_VAL` is :term:`soft deprecated`.
Comment thread
skirpichev marked this conversation as resolved.
Outdated
2 changes: 1 addition & 1 deletion Modules/cmathmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ special_type(double d)
#define P14 0.25*Py_MATH_PI
#define P12 0.5*Py_MATH_PI
#define P34 0.75*Py_MATH_PI
#define INF Py_HUGE_VAL
#define INF Py_INFINITY
#define N Py_NAN
#define U -9.5426319407711027e33 /* unlikely value, used as placeholder */

Expand Down
14 changes: 7 additions & 7 deletions Modules/mathmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ m_tgamma(double x)
}
else {
errno = ERANGE;
return Py_HUGE_VAL;
return Py_INFINITY;
}
}

Expand Down Expand Up @@ -502,14 +502,14 @@ m_lgamma(double x)
if (isnan(x))
return x; /* lgamma(nan) = nan */
else
return Py_HUGE_VAL; /* lgamma(+-inf) = +inf */
return Py_INFINITY; /* lgamma(+-inf) = +inf */
}

/* integer arguments */
if (x == floor(x) && x <= 2.0) {
if (x <= 0.0) {
errno = EDOM; /* lgamma(n) = inf, divide-by-zero for */
return Py_HUGE_VAL; /* integers n <= 0 */
return Py_INFINITY; /* integers n <= 0 */
}
else {
return 0.0; /* lgamma(1) = lgamma(2) = 0.0 */
Expand Down Expand Up @@ -682,7 +682,7 @@ m_log(double x)
return log(x);
errno = EDOM;
if (x == 0.0)
return -Py_HUGE_VAL; /* log(0) = -inf */
return -Py_INFINITY; /* log(0) = -inf */
else
return Py_NAN; /* log(-ve) = nan */
}
Expand Down Expand Up @@ -725,7 +725,7 @@ m_log2(double x)
}
else if (x == 0.0) {
errno = EDOM;
return -Py_HUGE_VAL; /* log2(0) = -inf, divide-by-zero */
return -Py_INFINITY; /* log2(0) = -inf, divide-by-zero */
}
else {
errno = EDOM;
Expand All @@ -741,7 +741,7 @@ m_log10(double x)
return log10(x);
errno = EDOM;
if (x == 0.0)
return -Py_HUGE_VAL; /* log10(0) = -inf */
return -Py_INFINITY; /* log10(0) = -inf */
else
return Py_NAN; /* log10(-ve) = nan */
}
Expand Down Expand Up @@ -2159,7 +2159,7 @@ math_ldexp_impl(PyObject *module, double x, PyObject *i)
errno = 0;
} else if (exp > INT_MAX) {
/* overflow */
r = copysign(Py_HUGE_VAL, x);
r = copysign(Py_INFINITY, x);
errno = ERANGE;
} else if (exp < INT_MIN) {
/* underflow to +-0 */
Expand Down
2 changes: 1 addition & 1 deletion Objects/floatobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -2414,7 +2414,7 @@ PyFloat_Unpack2(const char *data, int le)
if (e == 0x1f) {
if (f == 0) {
/* Infinity */
return sign ? -Py_HUGE_VAL : Py_HUGE_VAL;
return sign ? -Py_INFINITY : Py_INFINITY;
}
else {
/* NaN */
Expand Down
4 changes: 2 additions & 2 deletions Python/pystrtod.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ _Py_parse_inf_or_nan(const char *p, char **endptr)
s += 3;
if (case_insensitive_match(s, "inity"))
s += 5;
retval = negate ? -Py_HUGE_VAL : Py_HUGE_VAL;
retval = negate ? -Py_INFINITY : Py_INFINITY;
}
else if (case_insensitive_match(s, "nan")) {
s += 3;
Expand Down Expand Up @@ -286,7 +286,7 @@ _PyOS_ascii_strtod(const char *nptr, char **endptr)
string, -1.0 is returned and again ValueError is raised.

On overflow (e.g., when trying to convert '1e500' on an IEEE 754 machine),
if overflow_exception is NULL then +-Py_HUGE_VAL is returned, and no Python
if overflow_exception is NULL then +-Py_INFINITY is returned, and no Python
exception is raised. Otherwise, overflow_exception should point to
a Python exception, this exception will be raised, -1.0 will be returned,
and *endptr will point just past the end of the converted value.
Expand Down