gpt4 book ai didi

c++ - 避免在 libgmp 中中止

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:54 28 4
gpt4 key购买 nike

我有一些使用 libgmp 的代码。在某些时候,用户可能会请求一个非常大的数的阶乘。不幸的是,这会导致 libgmp 发出中止信号。

例如下面的代码:

#include <cmath>
#include <gmp.h>
#include <iostream>

int main() {

mpz_t result;
mpz_init(result);

mpz_fac_ui(result, 20922789888000);

std::cout << mpz_get_si(result) << std::endl;
}

结果:

$ ./test 
gmp: overflow in mpz type
Aborted

显然,产生的数量真的很大。有没有比中止更优雅地处理错误的方法。这是一个基于 GUI 的应用程序,它中止几乎是处理此类问题最不可取的方式。

最佳答案

根据 mpz/realloc.c 中的代码,您似乎运气不好和 mpz/realloc2.c .如果请求的内存太多,它只会这样做:

if (UNLIKELY (new_alloc > INT_MAX))
{
fprintf (stderr, "gmp: overflow in mpz type\n");
abort ();
}

关于c++ - 避免在 libgmp 中中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558684/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com