Como foi dito antes, para números positivos eles são iguais, mas diferem para números negativos. A regra é que int arredonda para 0, enquanto floor arredonda para infinito negativo.
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
Dito isso, também há uma diferença no tempo de execução. No meu sistema, eu calculei que a fundição é pelo menos 3 vezes mais rápida do que o chão.
Tenho um código que precisa da operação de piso de uma faixa limitada de valores, incluindo números negativos. E precisa ser muito eficiente, então usamos a seguinte função para isso:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
É claro que isso falhará para valores muito grandes de x (você terá alguns problemas de estouro) e para valores negativos abaixo de -100000, etc. para nosso aplicativo. Tome-o com um grão de sal, teste-o em seu sistema, etc. mas vale a pena considerar IMHO.
floor
, mas cuidado, pois issodouble
não é parafloat
. C99 também temfloorf
parafloat
.