1. ホーム
  2. c++

[解決済み】C / C++で整数の除算を高速に天井する

2022-03-28 15:31:45

質問

与えられた整数の値 xy CとC++は共に商として返す q = x/y は、浮動小数点数相当の床です。 代わりに天井を返す方法に興味があります。 例えば ceil(10/5)=2ceil(11/5)=3 .

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

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

この場合、余分な比較と乗算が必要になります。私が見た(実際に使った)他の方法では、キャストとして float または double . 追加の乗算(または第2の除算)と分岐を回避し、浮動小数点数としてのキャストも回避できる、より直接的な方法はないでしょうか?

どのように解決するのですか?

正の数の場合

unsigned int x, y, q;

切り上げるには ...

q = (x + y - 1) / y;

または(x+yのオーバーフローを回避するため)

q = 1 + ((x - 1) / y); // if x != 0