Как получается, что ceil () округляет ровное число без дробных частей?
Когда я пытаюсь сделать это:
double x = 2.22;
x *= 100; //which becomes 222.00...
printf("%lf", ceil(x)); //prints 223.00... (?)
Но когда я изменяю значение от 2,22 до 2,21
x *= 100; //which becomes 221.00...
printf("%lf", ceil(x)); //prints 221.00... as expected
Я попытался сделать это другим способом, используя modf (), и столкнулся с другой странной вещью:
double x = 2.22 * 100;
double num, fraction;
fraction = modf(x, &num);
if(fraction > 0)
num += 1; //goes inside here even when fraction is 0.00...
Так что же получается, 0,000 ... больше 0?
Кто-нибудь может объяснить, почему происходят обе эти ситуации? Также я собираю с использованием CC версии 4.1.2 в RedHat.