我有一些使用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;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
$ ./test
gmp: overflow in mpz type
Aborted
Run Code Online (Sandbox Code Playgroud)
显然,产生的数字真的很大.反正是否比中止更优雅地处理错误.这是一个基于GUI的应用程序,它中止是处理此类问题的最不可取的方法.