mirror of
https://github.com/python/cpython.git
synced 2025-10-21 22:22:48 +00:00
Issue #14521: Make result of float('nan') and float('-nan') more consistent across platforms. Further, don't rely on Py_HUGE_VAL for float('inf').
This commit is contained in:
parent
d68ac85e9a
commit
e383e82e04
5 changed files with 102 additions and 5 deletions
|
@ -22,6 +22,43 @@ case_insensitive_match(const char *s, const char *t)
|
|||
the successfully parsed portion of the string. On failure, return -1.0 and
|
||||
set *endptr to point to the start of the string. */
|
||||
|
||||
#ifndef PY_NO_SHORT_FLOAT_REPR
|
||||
|
||||
double
|
||||
_Py_parse_inf_or_nan(const char *p, char **endptr)
|
||||
{
|
||||
double retval;
|
||||
const char *s;
|
||||
int negate = 0;
|
||||
|
||||
s = p;
|
||||
if (*s == '-') {
|
||||
negate = 1;
|
||||
s++;
|
||||
}
|
||||
else if (*s == '+') {
|
||||
s++;
|
||||
}
|
||||
if (case_insensitive_match(s, "inf")) {
|
||||
s += 3;
|
||||
if (case_insensitive_match(s, "inity"))
|
||||
s += 5;
|
||||
retval = _Py_dg_infinity(negate);
|
||||
}
|
||||
else if (case_insensitive_match(s, "nan")) {
|
||||
s += 3;
|
||||
retval = _Py_dg_stdnan(negate);
|
||||
}
|
||||
else {
|
||||
s = p;
|
||||
retval = -1.0;
|
||||
}
|
||||
*endptr = (char *)s;
|
||||
return retval;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
double
|
||||
_Py_parse_inf_or_nan(const char *p, char **endptr)
|
||||
{
|
||||
|
@ -57,6 +94,8 @@ _Py_parse_inf_or_nan(const char *p, char **endptr)
|
|||
return retval;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* _PyOS_ascii_strtod:
|
||||
* @nptr: the string to convert to a numeric value.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue