This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


> 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

Attachment: 0001-nano-vfprintf_float.c-Fix-check-if-negative-for-nans.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]