整数値 および が与えられた場合x
、y
C と C++ はどちらも、q = x/y
浮動小数点の等価値の切り捨て値を商として返します。代わりに切り捨て値を返す方法に興味があります。たとえば、ceil(10/5)=2
および ですceil(11/5)=3
。
明らかなアプローチは次のようになります。
q = x / y;
if (q * y < x) ++q;
これには追加の比較と乗算が必要です。私が見た (実際に使用された) 他の方法では、またはとしてキャストしますfloat
。double
追加の乗算 (または 2 番目の除算) と分岐を回避し、浮動小数点数としてキャストすることも回避する、より直接的な方法はありますか?
ベストアンサー1
正の数値の場合、x を y で割ったときの上限 (q) を見つけます。
unsigned int x, y, q;
まとめると…
q = (x + y - 1) / y;
または(x+yのオーバーフローを回避する)
q = 1 + ((x - 1) / y); // if x != 0