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

整数の除算が常に切り上げられるようにするにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2025-01-20 09:11:08
オリジナル
241 人が閲覧しました

How Can We Ensure Integer Division Always Rounds Up?

整数の除算を切り上げる信頼性の高い方法

整数の除算はデフォルトでゼロに向かって丸められるため、問題が発生する可能性があります。常に切り上げられるようにするには、より良いソリューションが必要です。

この記事で提供されている例では、オペランドを倍精度浮動小数点数に変換し、Math.Ceiling() を使用することが回避策として考えられますが、これは非標準で非効率的であると考えられます。

次の方法をお勧めします:

1. 仕様を明確に定義する

  • 考えられるすべての入力シナリオを特定して定義します。
  • 各シナリオで予想される動作を指定します。
  • ゼロ除算と整数オーバーフローのエラー処理が含まれます。

2. テスト可能なアルゴリズムを設計する

  • 問題を小さなステップに分割します:

    • 整数の商を計算します。
    • 割り算が割り切れるかどうか (余りがない) を判定します。
    • オペランドの符号を確認して丸め方向を決定します。

3. ソリューションを実装します

次に実装例を示します:

<code class="language-java">public static int DivRoundUp(int dividend, int divisor) {
    if (divisor == 0) throw new IllegalArgumentException("除数为零");
    if (divisor == -1 && dividend == Integer.MIN_VALUE) throw new ArithmeticException("整数溢出");

    int quotient = dividend / divisor;
    boolean dividedEvenly = (dividend % divisor) == 0;

    if (dividedEvenly)
        return quotient;

    boolean roundedDown = ((divisor > 0) == (dividend > 0));
    return roundedDown ? quotient + 1 : quotient;
}</code>
ログイン後にコピー

このアルゴリズムは、割り切れないすべての除算結果を切り上げるという指定された動作に準拠しています。オーバーフローやゼロ除算エラーもうまく処理します。これは最もエレガントな解決策ではありませんが、明確でテスト可能で正しいものです。

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

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