Do not attempt to fix the significand top bit in long double input
received in printf. The code should never reach here because isnan
should now detect unnormals as NaN. This is already a NOP for glibc
since it uses the gcc __builtin_isnan, which detects unnormals as NaN.
Reviewed-by: Florian Weimer <fweimer@redhat.com>
&& res_ptr[N - 1] == 0)
/* Pseudo zero. */
*expt = 0;
- else
- /* Unlike other floating point formats, the most significant bit
- is explicit and expected to be set for normal numbers. Set it
- in case it is cleared in the input. Otherwise, callers will
- not be able to produce the expected multi-precision integer
- layout by shifting. */
- res_ptr[N - 1] |= (mp_limb_t) 1 << (LDBL_MANT_DIG - 1
- - ((N - 1) * BITS_PER_MP_LIMB));
return N;
}
char buf[30];
int ret = snprintf (buf, sizeof (buf), "%Lg", value);
TEST_COMPARE (ret, strlen (buf));
- if (strcmp (buf, "nan") != 0)
- /* If snprintf does not recognize the non-normal number as a NaN,
- it has added the missing explicit MSB. */
- TEST_COMPARE_STRING (buf, "3.02201e-4624");
+ TEST_COMPARE_STRING (buf, "nan");
return 0;
}