Subject: Re: floating point negative zero
To: Alan Barrett <>
From: David Laight <>
List: tech-userlevel
Date: 08/24/2007 18:59:38
On Fri, Aug 24, 2007 at 07:55:23PM +0200, Alan Barrett wrote:
> On at least the i386, the following C code prints "-0":
> 	double i = -1.0;
> 	i *= 0.0;
> 	print("%g\n", i);
> So does the analogous awk code, as I discovered from PR 36831.
> I understand that the underlying hardware floating point format
> distinguishes between positive and negative zero, but I am not sure
> that users want to see this distinction in the results from ordinary
> calculations.
> So:
> a. What's the recommended way to normalise a floating point number,
>    converting from negative zero to ordinary zero, and from assorted other
>    non-normalised forms to their normalised counterparts?
> b. Does it make sense for printf to expose the difference between
>    -0 and 0?
> c. Does it make sense for awk's print operator to expose the
>    difference ebwteen -0 and 0?
> --apb (Alan Barrett)

I believe the current code is correct (but I can't remember why I think that!)
ie the difference between +0 and -0 should be visible to programs.
Possibly because someone who implemented a conformant FP package told me
that it was one place where the one I wrote was non-conformant.

OTOH I'm not sure about printf.


David Laight: