読者です 読者をやめる 読者になる 読者になる

Boost.Multiprecision numeric_limits

C++

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