Sparky'nin cevabı, bu sorunu çözmenin standart bir yoludur, ancak yorumumda da yazdığım gibi, taşma riski taşıyorsunuz. Bu, daha geniş bir tür kullanılarak çözülebilir, ancak bölmek istersenizlong long
?
Nathan Ernst'ün cevabı bir çözüm sunuyor, ancak bir işlev çağrısı, değişken bir bildirim ve bir koşul içeriyor, bu da OPs kodundan daha kısa ve muhtemelen daha da yavaş yapıyor, çünkü optimize etmek daha zor.
Benim çözümüm şudur:
q = (x % y) ? x / y + 1 : x / y;
OPs kodundan biraz daha hızlı olacaktır, çünkü modulo ve bölme işlemci üzerinde aynı talimat kullanılarak gerçekleştirilir, çünkü derleyici eşdeğer olduğunu görebilir. En azından gcc 4.4.1 bu optimizasyonu x86'da -O2 bayrağıyla gerçekleştirir.
Teoride derleyici, Nathan Ernst kodundaki fonksiyon çağrısını sıralayabilir ve aynı şeyi yayabilir, ancak gcc test ettiğimde bunu yapmadı. Bunun nedeni, derlenmiş kodu standart kitaplığın tek bir sürümüne bağlaması olabilir.
Son bir not olarak, son derece sıkı bir döngüde olmanız ve tüm verileriniz kayıtlarda veya L1-önbelleğinde olması haricinde, bunların hiçbiri modern bir makinede önemli değildir. Aksi takdirde, muhtemelen Nathan Ernst'in dışında, bu çözümlerin tümü eşit derecede hızlı olacaktır, bu fonksiyonun ana bellekten alınması gerekiyorsa önemli ölçüde daha yavaş olabilir.
q = x/y + (x % y != 0);
yeterlidir