Như đã nói trước đây, đối với các số dương chúng giống nhau, nhưng chúng khác nhau đối với các số âm. Quy tắc là int làm tròn về phía 0, trong khi sàn làm tròn về phía âm vô cùng.
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
Điều này đang được nói, cũng có sự khác biệt về thời gian thực hiện. Trên hệ thống của mình, tôi đã hẹn giờ rằng quá trình truyền nhanh hơn ít nhất 3 lần so với sàn.
Tôi có mã cần hoạt động sàn của một phạm vi giá trị giới hạn, bao gồm cả số âm. Và nó cần phải rất hiệu quả, vì vậy chúng tôi sử dụng hàm sau cho nó:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
Tất nhiên điều này sẽ không thành công đối với các giá trị rất lớn của x (bạn sẽ gặp phải một số vấn đề về tràn) và đối với các giá trị âm dưới -100000, v.v. Nhưng tôi đã kiểm tra tốc độ của nó nhanh hơn ít nhất 3 lần so với sàn, điều này thực sự rất quan trọng cho ứng dụng của chúng tôi. Hãy xem nó bằng một hạt muối, kiểm tra nó trên hệ thống của bạn, v.v. nhưng nó đáng để xem xét IMHO.
floor
, nhưng hãy cẩn thận rằng điều nàydouble
không phải dành chofloat
. C99 cũng cófloorf
chofloat
.