May I suggest the study of...

Roberto Bagnara bagnara@cs.unipr.it
Sun Mar 5 15:18:00 GMT 2006


lemkemch@t-online.de wrote:
> Roberto Bagnara wrote:
>>> 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() 
>>> supportlibraries on cygwin and linux, they will definitely not be the 
>>> same.  Mypast reading of various relevant documents convinced me that 
>>> digitsbeyond the 17th in formatting of doubles are not required by 
>>> anystandard to be consistent between implementations.  They have no 
>>> usefulfunction, as 17 digits are sufficient to determine uniquely 
>>> thecorresponding binary value in IEEE 754 format.
>>
>> Thank you Tim.  We were unaware of this giant bug in the C standard.
> 
> Bug in the C standard??? May I suggest the study of
> http://docs.sun.com/source/806-3568/ncg_goldberg.html

I know it very well, thanks.  But you are missing the point.

> There is no exact binary representation for
> powers of ten.

So what?  You are again missing the point completely:
you are talking about binary representations for powers
of ten, while the point here is decimal representations
for numbers that are given by an integer times a powers of two.
A binary value in IEEE 754 format is either a special value
or corresponds to one real number.  This real number always
has a finite decimal representation.

BTW: this is 100% off-topic for the Cygwin mailing list.
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