Мне нужно некоторое уточнение о математике с плавающей запятой.
Я написал некоторый код для обучения 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) - ложно, довольно понятно, но почему умножение дает правильный ответ без ошибки?
Спасибо.
