Seperti yang telah dikatakan sebelumnya, untuk bilangan positif mereka sama, tetapi berbeda untuk bilangan negatif. Aturannya adalah int membulatkan menuju 0, sedangkan floor membulatkan menuju negatif tak terhingga.
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
Dengan demikian, ada juga perbedaan waktu eksekusi. Di sistem saya, saya menghitung waktu casting setidaknya 3 kali lebih cepat dari floor.
Saya memiliki kode yang memerlukan pengoperasian lantai dengan kisaran nilai yang terbatas, termasuk angka negatif. Dan itu harus sangat efisien, jadi kami menggunakan fungsi berikut untuk itu:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
Tentu saja ini akan gagal untuk nilai x yang sangat besar (Anda akan mengalami beberapa masalah luapan) dan untuk nilai negatif di bawah -100000, dll. Tapi saya telah mencatatnya setidaknya 3 kali lebih cepat dari lantai, yang sangat penting untuk aplikasi kita. Ambillah dengan sebutir garam, uji pada sistem Anda, dll. Tetapi ada baiknya mempertimbangkan IMHO.
floor
, tetapi berhati-hatilah karena inidouble
bukan untukfloat
. C99 juga memilikifloorf
untukfloat
.