C および C では、整数除算 (x/y) を実行すると、結果は等価の除算の下限になります。浮動小数点計算。ただし、特定のシナリオでは、均等に分割された配列内の要素の数を決定するなど、代わりに上限を取得する必要がある場合があります。
問題の定義
指定2 つの整数値 x と y がある場合、整数除算 x/y の上限 (q) を効率的に計算するにはどうすればよいでしょうか?目的は、追加の比較、乗算、または浮動小数点数への変換のオーバーヘッドを回避する方法を見つけることです。
効率的な解決策
正の整数入力の場合、 x を y で割った上限は、次の式を使用して計算できます:
q = (x + y - 1) / y;
この式は機能します。除算を実行する前に、被除数 (x) と除数 (y) の合計に 1 を加算します。これにより、除算の結果の小数部分が次の整数値に切り上げられます。
オーバーフローに関する考慮事項
x と y の合計のオーバーフローを防ぐには、次のようにします。別の式を使用することもできます:
q = 1 + ((x - 1) / y); // if x != 0
この式は、次の計算を実行する前に、被除数 (x) から 1 を減算します。 分割。 x が 0 の場合、結果が 1 になるように調整が行われます。
実装に関する考慮事項
2 つの式のどちらを選択するかは、特定の実装によって異なります。オーバーフローの可能性があります。一般に、2 番目の式は加算演算を回避するため、より効率的です。
結論
ここに示した式は、整数の上限を計算するための効率的で簡単な方法を提供します。計算コストのかかる方法や不正確な方法に頼ることなく、 C / C で除算を行うことができます。
以上がC/C で整数除算の上限を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。