C / C++ での整数除算の高速上限 質問する

C / C++ での整数除算の高速上限 質問する

整数値 および が与えられた場合xyC と C++ はどちらも、q = x/y浮動小数点の等価値の切り捨て値を商として返します。代わりに切り捨て値を返す方法に興味があります。たとえば、ceil(10/5)=2および ですceil(11/5)=3

明らかなアプローチは次のようになります。

q = x / y;
if (q * y < x) ++q;

これには追加の比較と乗算が必要です。私が見た (実際に使用された) 他の方法では、またはとしてキャストしますfloatdouble追加の乗算 (または 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

おすすめ記事