[PPL-devel] Re: Precision of doubles and stdio
Tim Prince
tprince at myrealbox.com
Fri Mar 3 23:20:48 CET 2006
Roberto Bagnara wrote:
>
> Hi there,
>
> the following little program
>
> #include <stdio.h>
>
> int main() {
> double d;
> scanf("%lf", &d);
> printf("%.1000g\n", d);
> return 0;
> }
>
> does this on Linux/i686
>
> $ gcc -W -Wall in.c
> $ a.out
> 70.9
> 70.900000000000005684341886080801486968994140625
>
> and does the following under Cygwin on the same machine:
>
> roberto at quark /tmp
> $ gcc -W -Wall in.c
>
> roberto at quark /tmp
> $ ./a.exe
> 70.9
> 70.90000000000000568434188608080148696899414
>
> Why? Is there a way to reconcile the two behaviors?
> Notice that I know about the x87 and its vaguaries:
> nonetheless I wonder why such a scanf immediately
> followed by a printf shows a difference between
> Cygwin and Linux.
If you haven't gone out of your way to install similar printf() support
libraries on cygwin and linux, they will definitely not be the same. My
past reading of various relevant documents convinced me that digits
beyond the 17th in formatting of doubles are not required by any
standard to be consistent between implementations. They have no useful
function, as 17 digits are sufficient to determine uniquely the
corresponding binary value in IEEE 754 format.
More information about the PPL-devel
mailing list