Re: [PATCH] Print sign of NaN values to nano-vfprintf.
"Richard Earnshaw (lists)" <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
On 11/12/2018 21:13, [email protected] wrote: >> diff --git a/newlib/libc/stdio/nano-vfprintf_float.c > b/newlib/libc/stdio/nano-vfprintf_float.c >> index 98893e97b..071a09edc 100644 >> --- a/newlib/libc/stdio/nano-vfprintf_float.c >> +++ b/newlib/libc/stdio/nano-vfprintf_float.c >> @@ -213,6 +213,8 @@ _printf_float (struct _reent *data, >> } >> if (isnan (_fpvalue)) >> { >> + if (_fpvalue < 0) >> + pdata->l_buf[0] = '-'; >> if (code <= 'G') /* 'A', 'E', 'F', or 'G'. */ >> cp = "NAN"; > > This patch doesn't work, as a comparison of a NaN with anything should > always return false. As per the main printf code, this can be done by > checking the sign bit instead: > > - if (_fpvalue < 0) > + if (signbit (_fpvalue)) > pdata->l_buf[0] = '-'; > > Patch attached. > That will work better for -0 as well. LGTM R. > Cheers, > Jon > > > 0001-nano-vfprintf_float.c-Fix-check-if-negative-for-nans.patch > > From 49593628a465af4e8409ed2aac142b9ed347156e Mon Sep 17 00:00:00 2001 > From: Jon Beniston <[email protected]> > Date: Tue, 11 Dec 2018 21:03:03 +0000 > Subject: [PATCH] nano-vfprintf_float.c: Fix check if negative for nans. > > --- > newlib/libc/stdio/nano-vfprintf_float.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/newlib/libc/stdio/nano-vfprintf_float.c b/newlib/libc/stdio/nano-vfprintf_float.c > index 071a09edc..524f67a31 100644 > --- a/newlib/libc/stdio/nano-vfprintf_float.c > +++ b/newlib/libc/stdio/nano-vfprintf_float.c > @@ -39,6 +39,7 @@ > #include <string.h> > #include <limits.h> > #include <stdint.h> > +#include <math.h> > #include <wchar.h> > #include <sys/lock.h> > #include <stdarg.h> > @@ -213,7 +214,7 @@ _printf_float (struct _reent *data, > } > if (isnan (_fpvalue)) > { > - if (_fpvalue < 0) > + if (signbit (_fpvalue)) > pdata->l_buf[0] = '-'; > if (code <= 'G') /* 'A', 'E', 'F', or 'G'. */ > cp = "NAN"; >