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

Linda Hamilton
リリース: 2024-11-24 04:29:10
オリジナル
822 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート