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:
Mark Dickinson 2012-04-29 15:31:56 +01:00
parent d68ac85e9a
commit e383e82e04
5 changed files with 102 additions and 5 deletions

View file

@ -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.