Мне нужно некоторое уточнение о математике с плавающей запятой.
Я написал некоторый код для обучения purpouses:
#include "stdio.h"
int main (int argc, char const *argv[])
{
int i;
double a=1.0/10.0;
double sum=0;
for(i = 0; i < 10; ++i)
sum+=a;
printf("%.17G\n", 10*a );
printf("%d\n", (10*a == 1.0) );
printf("%.17G\n", sum );
printf("%d\n", (sum == 1.0) );
return 0;
}
и вывод, который он дает:
1
1
0.99999999999999989
0
Почему (сумма == 1.0) - ложно, довольно понятно, но почему умножение дает правильный ответ без ошибки?
Спасибо.