diff options
author | Masamichi Hosoda <trueroad@trueroad.jp> | 2018-08-15 08:39:22 +0900 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2018-08-16 13:17:44 +0200 |
commit | c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4 (patch) | |
tree | 39cb49a148678ba7bc27627df19e2598aa055d04 /newlib/libc/stdlib/strtod.c | |
parent | 4c8fa88e4da3afdcb48236a4317beb303c4bd955 (diff) | |
download | newlib-c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4.zip newlib-c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4.tar.gz newlib-c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4.tar.bz2 |
Fix strtof ("-nan") returns positive NaN
strtof ("-nan") returned positive NaN instead of negative NaN.
strtod ("-nan") and strtold ("-nan") return negative NaN.
Linux glibc has been fixed
that strto{f|d|ld} ("-nan") returns negative NaN.
https://sourceware.org/bugzilla/show_bug.cgi?id=23007
This commit makes strtof preserves the negative sign bit
when parsing "-nan" like glibc.
Diffstat (limited to 'newlib/libc/stdlib/strtod.c')
-rw-r--r-- | newlib/libc/stdlib/strtod.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/newlib/libc/stdlib/strtod.c b/newlib/libc/stdlib/strtod.c index 3164e30..431d3ab 100644 --- a/newlib/libc/stdlib/strtod.c +++ b/newlib/libc/stdlib/strtod.c @@ -1289,7 +1289,7 @@ strtof_l (const char *__restrict s00, char **__restrict se, locale_t loc) { double val = _strtod_l (_REENT, s00, se, loc); if (isnan (val)) - return nanf (NULL); + return signbit (val) ? -nanf (NULL) : nanf (NULL); float retval = (float) val; #ifndef NO_ERRNO if (isinf (retval) && !isinf (val)) @@ -1304,7 +1304,7 @@ strtof (const char *__restrict s00, { double val = _strtod_l (_REENT, s00, se, __get_current_locale ()); if (isnan (val)) - return nanf (NULL); + return signbit (val) ? -nanf (NULL) : nanf (NULL); float retval = (float) val; #ifndef NO_ERRNO if (isinf (retval) && !isinf (val)) |