0

假设我想使用MPFR来计算 pi;我有以下代码,它有效:

mpfr_t PI;
mpfr_t one;
mpfr_init(PI);
mpfr_init(one);
mpfr_set_d(one, 1, MPFR_RNDN);
mpfr_asin(PI, one, MPFR_RNDN);
mpfr_mul_d(PI, PI, 2, MPFR_RNDN);

这相当于“pi = 2 * arcsin(1)”。我认识到 MPFR 永远不会完全退出键盘,但我是这个库的新手,我想知道是否有办法避免定义变量“one”;即,我希望代码看起来像这样:

mpfr_t PI;
mpfr_init(PI);
mpfr_asin(PI, <the number 1>, MPFR_RNDN);
mpfr_mul_d(PI, PI, 2, MPFR_RNDN);

我可以很容易地自己写一些东西,它需要一个 double 并返回一个 mpfr_t 对象,以代替 <...>。我真正的问题是:这是否已经内置到 MPFR 的某个地方?

编辑:我忘了提到自己构建一个函数来返回一个 mpfr_t 对象不是一个好的解决方案,因为它会导致内存泄漏。该变量必须在效用函数内部进行初始化,然后就无法清除它。我知道的唯一解决方案是为所有特殊函数编写包装器,例如 arcsin 和 log。我想要一个更清洁的解决方案,最好使用 MPFR 内置的东西。

4

0 回答 0