[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::digital_unix

Title:DIGITAL UNIX(FORMERLY KNOWN AS DEC OSF/1)
Notice:Welcome to the Digital UNIX Conference
Moderator:SMURF::DENHAM
Created:Thu Mar 16 1995
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:10068
Total number of notes:35879

9377.0. "ProRounding in printf command wrong" by NETRIX::"[email protected]" (David Lebender) Thu Apr 03 1997 06:58

Hi,

a customer of mine has a C program which doesn't round numbers 
correct if they are printed with the printf command. 

If the program:

#include <stdio.h>

main()

{
float f;
f=0.624;
printf("0.624=%2.2f\n",f);
f=0.625;
printf("0.625=%2.2f\n",f);
f=0.626;
printf("0.626=%2.2f\n",f);

printf("\n");

f=0.724;
printf("0.724=%2.2f\n",f);
f=0.725;
printf("0.725=%2.2f\n",f);
f=0.726;
printf("0.726=%2.2f\n",f);
}

is compilied with cc -o test test.c it produces the following output:

0.624=0.62
0.625=0.62
0.626=0.63

0.724=0.72
0.725=0.73
0.726=0.73

The rounding of the numbers ending with 5 is inconsistent. Rounding
"0.625" results in the correct value "0.62" while "0.725" leads to
the wrong value of "0.73".

Are any bugs in the C compiler known which cause that problem? Can
any compiler flags be used to avoid this unexpeted results?

Thank you for your help.


- David 

[Posted by WWW Notes gateway]
T.RTitleUserPersonal
Name
DateLines
9377.1Floating point is inexact.QUARRY::reevesJon Reeves, UNIX compiler groupThu Apr 03 1997 15:027
.625, expressed as a binary fraction, is exact.
.725, expressed in binary then converted back to
decimal, is 0.72499999999999998 which rounds to .72.

This is inherent in floating point; if you don't like it,
do your floating point arithmetic in decimal (I think COBOL
lets you do this).