前回は商の端数を切り上げましたので、今回は切り捨てることにします。

前回定義したxdiv_t構造体テンプレートを今回も使いますので再掲載しておきます。

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

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

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


元ネタ

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