C/C での整数の除算の上方への丸め
C/C で 2 つの整数 x と y を除算すると、結果 q = x/ y は、同等の浮動小数点の下限を求めます。ただし、ceil(10/5) = 2 や ceil(11/5) = 3 など、代わりに上限を取得することが望ましいシナリオもあります。
上限分割への非効率なアプローチ
天井分割の一般的なアプローチの 1 つは、下限を比較して増分することです。 value:
q = x / y; if (q * y < x) ++q;
この方法は効果的ではありますが、追加の比較と乗算が必要となり、パフォーマンスに影響を与える可能性があります。
効率的な天井分割アルゴリズム
非効率的なアプローチの制限を回避するには、正の数について次のアルゴリズムを検討します。ここで、q は x を除算した上限です。 by y:
unsigned int x, y, q; // Round up using (x + y - 1) / y q = (x + y - 1) / y;
代替オーバーフロー回避アルゴリズム
あるいは、x y の潜在的なオーバーフローを防ぐには、次の式を使用します。
// Round up using 1 + ((x - 1) / y) if x != 0 q = 1 + ((x - 1) / y);
これらの効率的なアルゴリズムを採用することで、追加のエラーによる落とし穴を回避できます。比較、乗算、および浮動小数点キャストにより、より高速かつ正確な天井除算演算が可能になります。
以上がC/C で整数の除算を効率的に切り上げるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。