整数の除算を切り上げる信頼性の高い方法
整数演算は難しい場合があり、除算も例外ではありません。整数の除算のデフォルトの動作はゼロに向かって丸められますが、切り上げが望ましい状況もあります。この記事では、整数の除算で切り上げを実装する方法を検討し、既存のソリューションの欠点に対処し、堅牢な実装を提案します。
問題の説明
目標は、結果を常に切り上げる整数除算関数を実装することです。既存の方法では、倍精度浮動小数点数へのキャストと Math.Ceiling()
の使用が必要ですが、浮動小数点演算が含まれるため、煩雑になる可能性があります。
解決策
整数演算は慎重に扱うことが重要です。望ましい動作を慎重に定義し、問題を管理可能なステップに分割することで、より洗練された効率的なソリューションを設計できます。
この仕様を実装するには、整数の商を計算し、除算が偶数かどうかを判断し、切り上げか切り捨てかを決定する必要があります。
<code class="language-java">public static int DivRoundUp(int dividend, int divisor) { if (divisor == 0) throw new ArithmeticException("除以零"); if (divisor == -1 && dividend == Integer.MIN_VALUE) throw new ArithmeticException("溢出错误"); int roundedQuotient = dividend / divisor; boolean dividedEvenly = (dividend % divisor) == 0; if (dividedEvenly) { return roundedQuotient; } else { boolean roundedDown = ((divisor > 0) == (dividend > 0)); if (roundedDown) { return roundedQuotient + 1; } else { return roundedQuotient; } } }</code>
このソリューションは仕様に準拠しており、比較的理解しやすいです。これにより、倍精度浮動小数点数へのキャストや複雑なエラー処理が回避され、効率的かつ堅牢になります。
以上が整数の除算で確実に上方丸めを行うにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。