2

我是mpfr的初学者,我编写了这个程序来进行特定的计算并得到它,但我不知道为什么会出现这个错误,这是我最重要的代码:

mpfr_t  myfct(int n)

{
   /......./
        return mpfr_get(result,MPFR_RNDN);

}

int main(void)
{

    mpfr_t U;
    mpfr_set_default_prec (53); 

    mpfr_set_emin (-1073);
    mpfr_set_emax (1024);

    n=10;
    mpfr_init2(U,24);
    mpfr_get(U,my_fct(n),MPFR_RNDN);
    mpfr_printf ("result: %.40Rg\n", U);

    mpfr_clear(U);

    return 0;
}

怎么了 ??

4

2 回答 2

1

与 GMP 类型一样,mpfr_t它是一个大小为 1 的数组(元素是一个结构,但您实际上并不需要知道这一点)。如果您决定编写一个返回 MPFR 编号的函数,您有 2 种可能性(除其他外):

  1. mpfr_t调用者以给定的精度分配和初始化。在这种情况下,mpfr_t应该作为函数的参数,而 this 是一个指向实际传递的数组的指针(根据 C 语言的规则)。基本上,这可以看作是通过引用传递变量。MPFR 函数使用这种方法。
  2. 调用者不分配任何东西。函数的原型应该是函数返回一个指向mpfr_ptr结构的指针。所以,这个函数mpfr_t通常会分配 with malloc(这样当函数返回时内存不会被释放),然后用 初始化结构mpfr_init2。精度可以由该函数选择或作为参数传递。

注意:您的程序有各种拼写错误,但我想这不是这个问题的重点。

于 2016-10-20T00:36:24.347 回答
0

mpfr_t,就像任何其他数组类型一样,不能用作返回值类型;见#1592。

要返回一个mpfr_t值,请遵循所有 MPFR 函数使用的约定,并通过函数参数返回。

您的代码中还有另一个错误:mpfr_get()应该返回int(根据约定;实际上在 MPFR 文档中没有找到这样的函数),而不是 a mpfr_t,见上文。

于 2016-10-19T16:54:12.713 回答