Boost 多精度库

问题描述 投票:0回答:1

Boost 多精度库尽可能实现最高价值

boost 多精度可以处理像 googolplex 这样大的值吗,就像 boost 多精度 cpp dec float 库一样?

那么有人可以告诉我任何 boost 多精度库中可能的最大值吗?

python boost arbitrary-precision boost-multiprecision
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.