我有一些使用 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 的应用程序,它中止几乎是处理此类问题的最不理想的方式。