¿Cómo es que ceil() redondea un flotante uniforme sin partes fraccionarias?
Cuando trato de hacer esto:math.h ceil no funciona como se esperaba en C
double x = 2.22;
x *= 100; //which becomes 222.00...
printf("%lf", ceil(x)); //prints 223.00... (?)
Pero cuando cambio el valor de 2,22 a 2,21
x *= 100; //which becomes 221.00...
printf("%lf", ceil(x)); //prints 221.00... as expected
Traté de hacerlo de otra manera como esto utilizando modf() y me encontré con otra extraña cosa:
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...
Entonces, ¿qué sucede es 0.000 ... es mayor que 0?
¿Alguien puede explicar por qué están pasando estas dos situaciones? También estoy compilando usando la versión 4.1.2 de cc en RedHat.
Duplicados: http://stackoverflow.com/questions/177506/why-do-i-see-a-double-variable-initialized-to-some-value-like-21-4-as-21-39999961 , http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-excaly-in-binary –