X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fisnan.c;h=ee9fa8b6440d9758a7906eeeae2518bdb962cf5c;hb=1bce9152c7fa70ba4408e43c758900df25f9a775;hp=182a7bd5f5f2514f66d97fa6a684958fbf88707e;hpb=8e04e14294e7ce756738625c3be1183be4b0c4eb;p=gnulib.git diff --git a/lib/isnan.c b/lib/isnan.c index 182a7bd5f..ee9fa8b64 100644 --- a/lib/isnan.c +++ b/lib/isnan.c @@ -1,5 +1,5 @@ /* Test for NaN that does not need libm. - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007-2010 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,18 @@ #include +/* Specification. */ +#ifdef USE_LONG_DOUBLE +/* Specification found in math.h or isnanl-nolibm.h. */ +extern int rpl_isnanl (long double x); +#elif ! defined USE_FLOAT +/* Specification found in math.h or isnand-nolibm.h. */ +extern int rpl_isnand (double x); +#else /* defined USE_FLOAT */ +/* Specification found in math.h or isnanf-nolibm.h. */ +extern int rpl_isnanf (float x); +#endif + #include #include @@ -36,7 +48,7 @@ # define SIZE SIZEOF_LDBL # define L_(literal) literal##L #elif ! defined USE_FLOAT -# define FUNC rpl_isnan +# define FUNC rpl_isnand # define DOUBLE double # define MAX_EXP DBL_MAX_EXP # define MIN_EXP DBL_MIN_EXP @@ -128,10 +140,10 @@ FUNC (DOUBLE x) -Infinity, which have the same exponent. */ m.value = x; if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) - & (EXP_MASK << EXPBIT0_BIT)) - == 0) + & (EXP_MASK << EXPBIT0_BIT)) + == 0) return (memcmp (&m.value, &plus_inf, SIZE) != 0 - && memcmp (&m.value, &minus_inf, SIZE) != 0); + && memcmp (&m.value, &minus_inf, SIZE) != 0); else return 0; } @@ -146,8 +158,10 @@ FUNC (DOUBLE x) 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