Boost.Multiprecisionの多倍長整数/多倍長浮動小数点数は、std::numeric_limitsを特殊化しています。これを使用して、最大値や、有限かどうか、などを取得できます。
#include <iostream> #include <string> #include <boost/multiprecision/cpp_int.hpp> template <class Integer> void print_limits(const std::string& name) { std::cout << std::boolalpha; using limits = std::numeric_limits<Integer>; std::cout << name << std::endl; std::cout << " is_bounded : " << limits::is_bounded << std::endl; const Integer maxval = limits::max(); std::cout << " max : " << maxval << std::endl; std::cout << std::endl; } int main() { using namespace boost::multiprecision; print_limits<cpp_int>("cpp_int"); print_limits<int128_t>("int128_t"); }
cpp_int is_bounded : false max : 0 int128_t is_bounded : true max : 340282366920938463463374607431768211455
cpp_intは任意精度のため無限なので、max()は0が返り、有限かどうかを判定するis_boundedがfalseになります。
参照:
std::numeric_limits support - Boost Multiprecision Library
std::numeric_limits - cpprefjp