Como se dijo antes, para los números positivos son iguales, pero difieren para los números negativos. La regla es que int se redondea hacia 0, mientras que floor se redondea hacia infinito negativo.
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
Dicho esto, también hay una diferencia en el tiempo de ejecución. En mi sistema, he cronometrado que el lanzamiento es al menos 3 veces más rápido que el piso.
Tengo un código que necesita la operación de piso de un rango limitado de valores, incluidos los números negativos. Y debe ser muy eficiente, por lo que usamos la siguiente función para ello:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
Por supuesto, esto fallará para valores muy grandes de x (se encontrará con algunos problemas de desbordamiento) y para valores negativos por debajo de -100000, etc. Pero lo he cronometrado para que sea al menos 3 veces más rápido que el piso, lo cual fue realmente crítico para nuestra aplicación. Tómelo con un grano de sal, pruébelo en su sistema, etc. pero vale la pena considerarlo en mi humilde opinión.
floor
, pero ten en cuenta que estodouble
no es parafloat
. C99 también tienefloorf
parafloat
.