* lib/isnan.c (rpl_isnanl): Make robust to -0.0L and pad bits.
* tests/test-isnan.c (main): Also test on zeroes.
* tests/test-isnanf.c (main): Likewise.
* tests/test-isnanl.h (main): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-12-11 Eric Blake <ebb9@byu.net>
+ Fix bug with -0.0L in previous patch.
+ * lib/isnan.c (rpl_isnanl): Make robust to -0.0L and pad bits.
+ * tests/test-isnan.c (main): Also test on zeroes.
+ * tests/test-isnanf.c (main): Likewise.
+ * tests/test-isnanl.h (main): Likewise.
+
Detect pseudo-denormals on x86 even when cross-compiling.
* lib/isnan.c (rpl_isnanl) [!KNOWN_EXPBIT0_LOCATION
&& USE_LONG_DOUBLE && x86]: Add one more check to filter out
memory_double m1;
memory_double m2;
+ memset (&m1.value, 0, SIZE);
+ memset (&m2.value, 0, SIZE);
m1.value = x;
- m2.value = x + 0;
+ m2.value = x + (x ? 0.0L : -0.0L);
if (memcmp (&m1.value, &m2.value, SIZE) != 0)
return 1;
# endif
ASSERT (!isnan (-2.718));
ASSERT (!isnan (-2.718e30));
ASSERT (!isnan (-2.718e-30));
+ ASSERT (!isnan (0.0));
+ ASSERT (!isnan (-0.0));
/* Infinite values. */
ASSERT (!isnan (1.0 / 0.0));
ASSERT (!isnan (-1.0 / 0.0));
ASSERT (!isnanf (-2.718f));
ASSERT (!isnanf (-2.718e30f));
ASSERT (!isnanf (-2.718e-30f));
+ ASSERT (!isnanf (0.0f));
+ ASSERT (!isnanf (-0.0f));
/* Infinite values. */
ASSERT (!isnanf (1.0f / 0.0f));
ASSERT (!isnanf (-1.0f / 0.0f));
ASSERT (!isnanl (-2.718L));
ASSERT (!isnanl (-2.718e30L));
ASSERT (!isnanl (-2.718e-30L));
+ ASSERT (!isnanl (0.0L));
+ ASSERT (!isnanl (-0.0L));
/* Infinite values. */
ASSERT (!isnanl (1.0L / 0.0L));
ASSERT (!isnanl (-1.0L / 0.0L));