Precision of doubles and stdio
Roberto Bagnara
bagnara@cs.unipr.it
Sun Mar 5 11:42:00 GMT 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@quark /tmp
>> $ gcc -W -Wall in.c
>>
>> roberto@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@cs.unipr.it
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
More information about the Cygwin
mailing list