ホームページ >バックエンド開発 >C++ >C/C で整数の除算を効率的に切り上げるにはどうすればよいですか?

C/C で整数の除算を効率的に切り上げるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-24 04:29:10897ブラウズ

How to Efficiently Round Up Integer Division in C/C  ?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。