Как было сказано ранее, для положительных чисел они одинаковы, но для отрицательных чисел они отличаются. По правилу int округляется в сторону 0, а пол - в сторону отрицательной бесконечности.
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
При этом также есть разница во времени выполнения. В моей системе я рассчитал, что заброс как минимум в 3 раза быстрее, чем на полу.
У меня есть код, который требует работы с ограниченным диапазоном значений, включая отрицательные числа. И он должен быть очень эффективным, поэтому мы используем для этого следующую функцию:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
Конечно, это не сработает для очень больших значений x (вы столкнетесь с некоторыми проблемами переполнения) и для отрицательных значений ниже -100000 и т. Д. Но я установил, что он будет как минимум в 3 раза быстрее, чем пол, что было действительно критично. для нашего приложения. Отнеситесь к нему с недоверием, протестируйте его на своей системе и т. Д., Но это стоит рассмотреть ИМХО.
floor
, но будьте осторожны, этоdouble
не дляfloat
. C99 также имеетfloorf
дляfloat
.