Boost 多精度库尽可能实现最高价值
boost 多精度可以处理像 googolplex 这样大的值吗,就像 boost 多精度 cpp dec float 库一样?
那么有人可以告诉我任何 boost 多精度库中可能的最大值吗?
cpp_dec_float
将是你最好的选择,仅仅因为 googol(plex) 的基数为 10 的尾数始终为 1。但是,指数类型要求是内置整数类型。如果编译器支持 std::int128_t ,则它甚至不合格。所以,就这样吧。
使用 GMP 后端似乎会在 5e+17 位数字处崩溃:
#include <boost/multiprecision/gmp.hpp>
#include <iostream>
int main() {
using namespace boost::multiprecision;
using Real = mpf_float;
using Int = mpz_int;
// create a googolplex
Int googol = pow(Int(10), 100u);
// print it
std::cout << googol << std::endl;
std::cout << "check: " << log10(Real(googol)) << std::endl;
// no plex for you
auto not_googolplex = pow(Real(10), Real("5e17"));
std::cout << "check: " << log10(not_googolplex) << std::endl;
not_googolplex = pow(Real(10), Real("5e18"));
std::cout << "check: " << log10(not_googolplex) << std::endl;
}
打印(在我的 AMD64 64GiB 盒子上使用 GCC14 或 Clang18 和 Boost 1.86):
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
check: 100
check: 5e+17
GNU MP: Cannot allocate memory (size=4611686018427387960)
Aborted (core dumped)