|
Message-ID: <20210812005922.GD13220@brightrain.aerifal.cx> Date: Wed, 11 Aug 2021 20:59:23 -0400 From: Rich Felker <dalias@...c.org> To: Stefan Kanthak <stefan.kanthak@...go.de> Cc: Szabolcs Nagy <nsz@...t70.net>, musl@...ts.openwall.com Subject: Re: [PATCH] Properly simplified nextafter() On Thu, Aug 12, 2021 at 12:43:36AM +0200, Stefan Kanthak wrote: > Szabolcs Nagy <nsz@...t70.net> wrote: > > >* Rich Felker <dalias@...c.org> [2021-08-11 13:57:23 -0400]: > >> On Wed, Aug 11, 2021 at 06:50:28PM +0200, Stefan Kanthak wrote: > >> > Rich Felker <dalias@...c.org> wrote: > >> > > static __inline unsigned __FLOAT_BITS(float __f) > >> > > { > >> > > union {float __f; unsigned __i;} __u; > >> > > __u.__f = __f; > >> > > return __u.__i; > >> > > } > >> > > > >> > > #define isnan(x) ( \ > >> > > sizeof(x) == sizeof(float) ? (__FLOAT_BITS(x) & 0x7fffffff) > 0x7f800000 : \ > >> > > sizeof(x) == sizeof(double) ? (__DOUBLE_BITS(x) & -1ULL>>1) > 0x7ffULL<<52 : \ > >> > > __fpclassifyl(x) == FP_NAN) > >> > > > >> > > So, nope. > >> > > >> > GCC typically uses its __builtin_isnan() for isnan(), which doesn't > >> > use integer instructions or reloads: > >> > >> That's only if you #define isnan(x) __builtin_isnan(x) > > > > even then it should use int arithmetics, see below > [...] > > it is also wrong: isnan must not signal for signaling nan. > > ARGH: I recommend to read the subject first, then the C standard and > recall how nextafter() is supposed to handle signalling NANs! > > <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafter.html> I believe he was saying the implementation of isnan is wrong because isnan isn't allowed to do that. Not that the behavior conflicts with the contract for nextafter. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.