[PPL-devel] Re: Precision of doubles and stdio
Roberto Bagnara
bagnara at cs.unipr.it
Sun Mar 5 12:44:18 CET 2006
Tim Prince wrote:
> 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.
Thank you Tim. We were unaware of this giant bug in the C standard.
All the best,
Roberto
--
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it
More information about the PPL-devel
mailing list