[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