Boost.Multiprecision 異なる精度間での型変換

Boost.Multiprecisionの多倍長整数と多倍長浮動小数点数は、異なる精度間での変換をサポートしています。


たとえば、intやlong型といった組み込みの整数型から、int128_tやcpp_intといった多倍長整数への暗黙変換が可能です。
また、int128_tからint256_tへ、といったより大きい精度への暗黙変換が可能です。

#include <boost/multiprecision/cpp_int.hpp>

using namespace boost::multiprecision;

int main()
{
    // intからint128_tへの暗黙変換
    int i = 3;
    int128_t i128 = i; // OK

    // int128_tからint256_tへの暗黙変換
    int256_t i256 = i128; // OK
}

逆に、より小さい精度への変換は、明示的な型変換を使用する場合のみ可能です。

#include <boost/multiprecision/cpp_int.hpp>

using namespace boost::multiprecision;

int main()
{
    int256_t i256 = 3;

//  int128_t i128 = i256; // コンパイルエラー!変換できない
    int128_t i128 = static_cast<int128_t>(i256); // OK
}