Boost.Multiprecision 式テンプレートオプション

Boost.Multiprecisionの多倍長演算型の演算には、デフォルトで式テンプレートが使用されます。そして、式テンプレートの使用はオフにすることもできます。以下、オフにする例です。

#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>

namespace mp = boost::multiprecision;
using cpp_dec_float_50 = mp::number<
    mp::cpp_dec_float<50>,  // 仮数部は50桁
    mp::et_off              // 式テンプレートをオフにする
>;

int main()
{
    cpp_dec_float_50 x = 3.0f;
    cpp_dec_float_50 y = x * x;
    std::cout << y << std::endl;
}
9

boost::multiprecision::numberの第2テンプレート引数に、et_offを設定します。内部的な演算が変わるだけで、ユーザーコードは変わりません。
Boost.MultiprecisionのFAQには、「式テンプレートをいつ使用すべきか」が書かれています。これによれば、動的メモリ確保を行うようなものは、オブジェクトの生成コストが高いので、式テンプレートを使おう、とのことです。


参照:
number - Boost Multiprecision Library
FAQ - Boost Multiprecision Library