Daha önce söylendiği gibi, pozitif sayılar için aynıdırlar, ancak negatif sayılar için farklıdırlar. Kural, int sıfıra yuvarlarken, taban negatif sonsuza yuvarlanır.
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
Bununla birlikte, yürütme süresinde de bir fark var. Sistemimde, dökümün zeminden en az 3 kat daha hızlı olduğunu zamanladım.
Negatif sayılar da dahil olmak üzere sınırlı bir değer aralığının kat işlemine ihtiyaç duyan kodum var. Ve çok verimli olması gerekiyor, bu yüzden bunun için aşağıdaki işlevi kullanıyoruz:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
Elbette bu, çok büyük x değerleri (bazı taşma sorunları yaşarsınız) ve -100000'in altındaki negatif değerler için başarısız olur. Ama bunu zeminden en az 3 kat daha hızlı olarak ayarladım, bu gerçekten kritikti uygulamamız için. Bir tuz tanesi ile alın, sisteminizde test edin, vb. Ancak IMHO'yu dikkate almaya değer.
floor
, ama bunun içindouble
olmadığına dikkat edinfloat
. C99 ayrıca vardırfloorf
içinfloat
.