ホームページ >バックエンド開発 >C++ >整数の除算が常に切り上げられることを保証するにはどうすればよいですか?

整数の除算が常に切り上げられることを保証するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-20 09:22:09590ブラウズ

How to Guarantee Integer Division Always Rounds Up?

整数の除算が常に切り上げられるようにする方法

この記事は、整数の除算が常に切り上げられるようにする信頼できる方法を見つけることを目的としています。

元のメソッドの見直し

当初の提案は、整数を倍精度浮動小数点数に変換し、Math.Ceiling() 関数を使用して結果を切り上げることでした。このアプローチは機能しているように見えますが、型変換により不必要な複雑さが生じ、精度の問題が発生する可能性があります。

堅牢なソリューション

この問題を解決するために、より包括的で堅牢なソリューションが以下に提供されます:

<code class="language-java">public static int DivRoundUp(int dividend, int divisor) {
  if (divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == -1)) throw new ArithmeticException("Invalid input");  // 显式处理异常情况

  int roundedTowardsZeroQuotient = dividend / divisor;
  boolean dividedEvenly = (dividend % divisor) == 0;
  if (dividedEvenly) return roundedTowardsZeroQuotient;

  boolean wasRoundedDown = ((divisor > 0) == (dividend > 0));
  if (wasRoundedDown) return roundedTowardsZeroQuotient + 1;
  else return roundedTowardsZeroQuotient;
}</code>

説明

この関数は、次のような考えられるすべての状況を細心の注意を払って処理します。

  • 例外ケース: ゼロによる除算が発生した場合、または最小の負の整数 (Integer.MIN_VALUE) が -1 で除算された場合、例外を検出してスローします。
  • 商の決定: 最初に整数算術演算 (被除数 / 除数) を使用して商を計算します。
  • 剰余チェック: 除算で整数の剰余が生成されるかどうかを決定します。余りがない場合は、整数の除算で得た商を切り上げたので、その商を返します。
  • 切り上げ決定: 余りがある場合、商を切り下げるか (被除数と除数の符号が反対であるため)、切り上げるか (被除数と除数の符号が同じであるため) を決定します。被除数と除数)。これに基づいて、商を適宜調整します。

重要な考慮事項

  • 整数演算の優先順位: この解決策は、問題ステートメントで要求されているように、完全に整数演算の範囲内にあります。
  • 単純さと明確さ: コードは簡潔かつ明確で、テクニックよりも正確さを強調しています。
  • 包括的な処理: 考えられるすべての状況を予測して処理し、一貫した切り上げを保証します。

これらの原則に従うことで、整数除算用の堅牢で信頼性の高い切り上げコードを開発できます。

以上が整数の除算が常に切り上げられることを保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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