今回は整数除算の商の端数を切り上げます。+∞方向に丸めるといってもよいでしょう。

元ネタでは負の数は対象にしていませんでしたが、せっかく実装し直すのでこちらでは負の数も対象にしました。

例によってC++98以降で使えるようにはしましたが、is_integralにはTR1かBoost C++ Librariesを使うようにしてください。C++11以降なら標準ライブラリだけでOKです。使っているのはassertの引数だけなのでNDEBUGマクロを定義すれば標準ライブラリの範囲で大丈夫でしょう。

境界値のチェックはやっていませんのでオーバーフローが起きると未定義の動作になりますが、とりあえずこれで動作します。

以前のWebサイトには定数式にするためのメタ関数も掲載していたのですが、C++14以降ならconstexprを付けるだけで済みます。C++11のconstexprは制限が多いのでもう一工夫必要になります(今回は掲載しません)。

標準関数のceilを使っても端数の切り上げを行うことができます。ただし、ceilは引数も返却値も浮動小数点数ですので、整数だけで処理したい場合には不向きです。


元ネタ

↑ 1. 整数型に関するテンプレート