[PATCH] Print sign of NaN values to nano-vfprintf.

jon@beniston.com jon@beniston.com
Tue Dec 11 22:08:00 GMT 2018


> 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.

Cheers,
Jon

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-nano-vfprintf_float.c-Fix-check-if-negative-for-nans.patch
Type: application/octet-stream
Size: 965 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20181211/33257c6b/attachment.obj>


More information about the Newlib mailing list