# Need help with simple C program

1. May 2, 2007

### meldave00

Hi,

Please see my code below. If I enter 4.42 in for my first float
and 10.00 in for my second float and I muliply them together I get
a result of 44.200001. The reason is because the compiler thinks
that 4.42 = 4.4200001 (I checked this during debug). Why does this
do this? How does anybody get accurate results when working with
C? Anyone know what the work around is for this type of issue?
I'm refreshing my knowledge of C.... I'm a little rusty.

#include <stdio.h>

void main(){

float aFloat1; float aFloat2; float aFloat3;

printf(" Please enter the value of float #1: ");
scanf("%f",&aFloat1);

printf(" Please enter the value of float #2: ");
scanf("%f", &aFloat2);

aFloat3 = aFloat2 * aFloat1;

printf("\n");

4. May 2, 2007

### NoTime

Float is and always has been problematical in this regard.
In the OP the problem can be fixed by truncation.
But, 1+1 = 1.999999 is not going to get fixed this way.

5. May 2, 2007

### nmtim

This has nothing to do with C. It's a property of the machine and how it represents numbers.

See http://docs.sun.com/source/806-3568/ncg_goldberg.html

Floating point numbers are not continuous--they're discrete. There are a lot of numbers (I would guess most of them) that cannot be represented exactly by a finite number of digits. In base 10, think square root of two, or 1/3. In the usual binary floating point representation, I believe 1/10 cannot be represented in a finite sequence of digits.

So remember, your results are almost always approximate. It may not even be that good an approximation, and there are ways to blow away your approximation in a hurry. If you keep that in mind, you'll be ahead of most scientific programmers. "Go to double" is the standard answer. But if you don't understand the underlying problem, you'll get bit there, too.