summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorSergey B Kirpichev <skirpichev@gmail.com>2024-05-29 07:51:19 (GMT)
committerGitHub <noreply@github.com>2024-05-29 07:51:19 (GMT)
commitcd11ff12ac55f37d38b5ef08c143c78f07da5717 (patch)
tree10a05f34466399302791c3bda940ac67170cf64f /Objects
parent86d1a1aa8841ea182eaf434ae6b942b3e93f58db (diff)
downloadcpython-cd11ff12ac55f37d38b5ef08c143c78f07da5717.zip
cpython-cd11ff12ac55f37d38b5ef08c143c78f07da5717.tar.gz
cpython-cd11ff12ac55f37d38b5ef08c143c78f07da5717.tar.bz2
gh-119613: Use C99+ functions instead of Py_IS_NAN/INFINITY/FINITE (#119619)
Diffstat (limited to 'Objects')
-rw-r--r--Objects/complexobject.c8
-rw-r--r--Objects/floatobject.c30
-rw-r--r--Objects/longobject.c4
3 files changed, 21 insertions, 21 deletions
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index d8b0e84..943c5cc 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -188,16 +188,16 @@ _Py_c_abs(Py_complex z)
/* sets errno = ERANGE on overflow; otherwise errno = 0 */
double result;
- if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) {
+ if (!isfinite(z.real) || !isfinite(z.imag)) {
/* C99 rules: if either the real or the imaginary part is an
infinity, return infinity, even if the other part is a
NaN. */
- if (Py_IS_INFINITY(z.real)) {
+ if (isinf(z.real)) {
result = fabs(z.real);
errno = 0;
return result;
}
- if (Py_IS_INFINITY(z.imag)) {
+ if (isinf(z.imag)) {
result = fabs(z.imag);
errno = 0;
return result;
@@ -207,7 +207,7 @@ _Py_c_abs(Py_complex z)
return Py_NAN;
}
result = hypot(z.real, z.imag);
- if (!Py_IS_FINITE(result))
+ if (!isfinite(result))
errno = ERANGE;
else
errno = 0;
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 96227f2..a5bf356 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -418,7 +418,7 @@ float_richcompare(PyObject *v, PyObject *w, int op)
if (PyFloat_Check(w))
j = PyFloat_AS_DOUBLE(w);
- else if (!Py_IS_FINITE(i)) {
+ else if (!isfinite(i)) {
if (PyLong_Check(w))
/* If i is an infinity, its magnitude exceeds any
* finite integer, so it doesn't matter which int we
@@ -749,13 +749,13 @@ float_pow(PyObject *v, PyObject *w, PyObject *z)
if (iw == 0) { /* v**0 is 1, even 0**0 */
return PyFloat_FromDouble(1.0);
}
- if (Py_IS_NAN(iv)) { /* nan**w = nan, unless w == 0 */
+ if (isnan(iv)) { /* nan**w = nan, unless w == 0 */
return PyFloat_FromDouble(iv);
}
- if (Py_IS_NAN(iw)) { /* v**nan = nan, unless v == 1; 1**nan = 1 */
+ if (isnan(iw)) { /* v**nan = nan, unless v == 1; 1**nan = 1 */
return PyFloat_FromDouble(iv == 1.0 ? 1.0 : iw);
}
- if (Py_IS_INFINITY(iw)) {
+ if (isinf(iw)) {
/* v**inf is: 0.0 if abs(v) < 1; 1.0 if abs(v) == 1; inf if
* abs(v) > 1 (including case where v infinite)
*
@@ -770,7 +770,7 @@ float_pow(PyObject *v, PyObject *w, PyObject *z)
else
return PyFloat_FromDouble(0.0);
}
- if (Py_IS_INFINITY(iv)) {
+ if (isinf(iv)) {
/* (+-inf)**w is: inf for w positive, 0 for w negative; in
* both cases, we need to add the appropriate sign if w is
* an odd integer.
@@ -885,7 +885,7 @@ float_is_integer_impl(PyObject *self)
if (x == -1.0 && PyErr_Occurred())
return NULL;
- if (!Py_IS_FINITE(x))
+ if (!isfinite(x))
Py_RETURN_FALSE;
errno = 0;
o = (floor(x) == x) ? Py_True : Py_False;
@@ -1021,7 +1021,7 @@ double_round(double x, int ndigits) {
}
y = (x*pow1)*pow2;
/* if y overflows, then rounded value is exactly x */
- if (!Py_IS_FINITE(y))
+ if (!isfinite(y))
return PyFloat_FromDouble(x);
}
else {
@@ -1041,7 +1041,7 @@ double_round(double x, int ndigits) {
z *= pow1;
/* if computation resulted in overflow, raise OverflowError */
- if (!Py_IS_FINITE(z)) {
+ if (!isfinite(z)) {
PyErr_SetString(PyExc_OverflowError,
"overflow occurred during round");
return NULL;
@@ -1089,7 +1089,7 @@ float___round___impl(PyObject *self, PyObject *o_ndigits)
return NULL;
/* nans and infinities round to themselves */
- if (!Py_IS_FINITE(x))
+ if (!isfinite(x))
return PyFloat_FromDouble(x);
/* Deal with extreme values for ndigits. For ndigits > NDIGITS_MAX, x
@@ -1237,7 +1237,7 @@ float_hex_impl(PyObject *self)
CONVERT_TO_DOUBLE(self, x);
- if (Py_IS_NAN(x) || Py_IS_INFINITY(x))
+ if (isnan(x) || isinf(x))
return float_repr((PyFloatObject *)self);
if (x == 0.0) {
@@ -1570,12 +1570,12 @@ float_as_integer_ratio_impl(PyObject *self)
CONVERT_TO_DOUBLE(self, self_double);
- if (Py_IS_INFINITY(self_double)) {
+ if (isinf(self_double)) {
PyErr_SetString(PyExc_OverflowError,
"cannot convert Infinity to integer ratio");
return NULL;
}
- if (Py_IS_NAN(self_double)) {
+ if (isnan(self_double)) {
PyErr_SetString(PyExc_ValueError,
"cannot convert NaN to integer ratio");
return NULL;
@@ -2060,12 +2060,12 @@ PyFloat_Pack2(double x, char *data, int le)
e = 0;
bits = 0;
}
- else if (Py_IS_INFINITY(x)) {
+ else if (isinf(x)) {
sign = (x < 0.0);
e = 0x1f;
bits = 0;
}
- else if (Py_IS_NAN(x)) {
+ else if (isnan(x)) {
/* There are 2046 distinct half-precision NaNs (1022 signaling and
1024 quiet), but there are only two quiet NaNs that don't arise by
quieting a signaling NaN; we get those by setting the topmost bit
@@ -2234,7 +2234,7 @@ PyFloat_Pack4(double x, char *data, int le)
float y = (float)x;
int i, incr = 1;
- if (Py_IS_INFINITY(y) && !Py_IS_INFINITY(x))
+ if (isinf(y) && !isinf(x))
goto Overflow;
unsigned char s[sizeof(float)];
diff --git a/Objects/longobject.c b/Objects/longobject.c
index b0456a3..2dc2cb7 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -401,12 +401,12 @@ PyLong_FromDouble(double dval)
double frac;
int i, ndig, expo, neg;
neg = 0;
- if (Py_IS_INFINITY(dval)) {
+ if (isinf(dval)) {
PyErr_SetString(PyExc_OverflowError,
"cannot convert float infinity to integer");
return NULL;
}
- if (Py_IS_NAN(dval)) {
+ if (isnan(dval)) {
PyErr_SetString(PyExc_ValueError,
"cannot convert float NaN to integer");
return NULL;