I know that floating point values are limited in numbers that can be expressed exactly, and I found many sites that describe why this happens. But I did not find any information on how to solve this problem effectively. But I'm sure NASA is out of order with 0.2 / 0.1 = 0.199999. Example:
#include <stdio.h>
#include <float.h>
#include <math.h>
int main(void)
{
float number = 4.20;
float denominator = 0.25;
printf("number = %f\n", number);
printf("denominator = %f\n", denominator);
printf("quotient as a float = %f should be 16.8\n", number/denominator);
printf("the remainder of 4.20 / 0.25 = %f\n", number - ((int) number/denominator)*denominator);
printf("now if i divide 0.20000 by 0.1 i get %f not 2\n", ( number - ((int) number/denominator)*denominator)/0.1);
}
output:
number = 4.200000
denominator = 0.250000
quotient as a float = 16.799999 should be 16.8
the remainder of 4.20 / 0.25 = 0.200000
now if i divide 0.20000 by 0.1 i get 1.999998 not 2
So, how do I do arithmetic with floats (either decimal or double) and get accurate results. I hope I have not just missed something beyond the obvious. Any help would be awesome! Thank.
user7045711
source
share