N
newgoat
Hello,
I wrote two program to test the inherent problem binary system has
with representing floating points values. Adding 0.1 to itself 1000
times results in a number slightly larger than 100. But to my surprise,
adding it to itself 100000 times results in a number smaller than
10000.
Can anybody tell me why? Thanks!
#include <stdio.h>
float add_dimes_fversion(int);
double add_dimes_dversion(int);
int main(void){
int add_times1 = 1000;
int add_times2 = 100000;
/* Add 0.1 to itself for 1000 times using float for all data would
result in 100.099045. */
printf("\nAdding 0.1 for 1000 times using float data results in
%.10f\n", add_dimes_fversion(add_times1));
/* Add 0.1 to itself for 100000 times using float for all data would
result in 9998.6562500000. */
printf("\nAdding 0.1 for 100000 times using float data results in
%.10f\n\n", add_dimes_fversion(add_times2));
/* Add 0.1 to itself for 1000 times using float for all data would
result in 100.09999999999858744104. */
printf("\nAdding 0.1 for 1000 times using double data results in
%.20lf\n",add_dimes_dversion(add_times1));
/* Add 0.1 to itself for 100000 times using float for all data would
result in 9998.65625000000000000000. */
printf("\nAdding 0.1 for 100000 times using double data results in
%.20lf\n\n", add_dimes_fversion(add_times2));
printf("0.1 * 1000 = %lf, 0.1 * 100000 = %lf\n\n", 0.1 * 1000.0, 0.1
* 100000);
return 0;
}
/* Test with float data type */
float add_dimes_fversion(int n){
float sum = 0.0;
int counter = 0;
while(counter <= n){
sum = sum + 0.1;
counter++;
}
return sum;
}
/* Test with double data type */
double add_dimes_dversion(int n){
double sum = 0.0;
int counter = 0;
while(counter <= n){
sum = sum + 0.1;
counter++;
}
return sum;
}
I wrote two program to test the inherent problem binary system has
with representing floating points values. Adding 0.1 to itself 1000
times results in a number slightly larger than 100. But to my surprise,
adding it to itself 100000 times results in a number smaller than
10000.
Can anybody tell me why? Thanks!
#include <stdio.h>
float add_dimes_fversion(int);
double add_dimes_dversion(int);
int main(void){
int add_times1 = 1000;
int add_times2 = 100000;
/* Add 0.1 to itself for 1000 times using float for all data would
result in 100.099045. */
printf("\nAdding 0.1 for 1000 times using float data results in
%.10f\n", add_dimes_fversion(add_times1));
/* Add 0.1 to itself for 100000 times using float for all data would
result in 9998.6562500000. */
printf("\nAdding 0.1 for 100000 times using float data results in
%.10f\n\n", add_dimes_fversion(add_times2));
/* Add 0.1 to itself for 1000 times using float for all data would
result in 100.09999999999858744104. */
printf("\nAdding 0.1 for 1000 times using double data results in
%.20lf\n",add_dimes_dversion(add_times1));
/* Add 0.1 to itself for 100000 times using float for all data would
result in 9998.65625000000000000000. */
printf("\nAdding 0.1 for 100000 times using double data results in
%.20lf\n\n", add_dimes_fversion(add_times2));
printf("0.1 * 1000 = %lf, 0.1 * 100000 = %lf\n\n", 0.1 * 1000.0, 0.1
* 100000);
return 0;
}
/* Test with float data type */
float add_dimes_fversion(int n){
float sum = 0.0;
int counter = 0;
while(counter <= n){
sum = sum + 0.1;
counter++;
}
return sum;
}
/* Test with double data type */
double add_dimes_dversion(int n){
double sum = 0.0;
int counter = 0;
while(counter <= n){
sum = sum + 0.1;
counter++;
}
return sum;
}