Fix strtod ("nan") and strtold ("nan") returns wrong negative NaN

The definition of qNaN for x86_64 and i386 was wrong.
strto{d|ld} ("nan") returned wrong negative NaN
instead of correct positive NaN
since it used the wrong definition.

On the other hand, strtof ("nan") returns correct positive NaN
since it uses nanf ("") instead of the wrong definition.

This commit makes strto{d|ld} ("nan") uses {nan|nanl} ("")
like strtof ("nan") using.
So strto{d|ld} ("nan") returns positive NaN.
This commit is contained in:
Masamichi Hosoda 2018-08-16 09:18:50 +09:00 committed by Corinna Vinschen
parent 8f1259a6ef
commit 6c212a8b78
2 changed files with 2 additions and 9 deletions

View File

@ -444,10 +444,7 @@ _strtod_l (struct _reent *ptr, const char *__restrict s00, char **__restrict se,
}
else {
#endif
dword0(rv) = NAN_WORD0;
#ifndef _DOUBLE_IS_32BITS
dword1(rv) = NAN_WORD1;
#endif /*!_DOUBLE_IS_32BITS*/
dval(rv) = nan ("");
#ifndef No_Hex_NaN
}
#endif

View File

@ -93,11 +93,7 @@ ULtox(__UShort *L, __ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[0] = ldus_QNAN0;
L[1] = ldus_QNAN1;
L[2] = ldus_QNAN2;
L[3] = ldus_QNAN3;
L[4] = ldus_QNAN4;
*((long double*)L) = nanl ("");
}
if (k & STRTOG_Neg)
L[_0] |= 0x8000;