2016-10-19 6 views
1

私はmpfrで初心者ですが、このプログラムを書いて特定の計算をしてみたようですが、なぜこのエラーが表示されるのかわかりませんこれは私の最も重要なコードです:エラー:関数として宣言されています(mpfr libary)

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; 
} 

何が問題なのですか?

+0

'my_fct'は' myfct'とは異なります。 –

+0

これは単なる入力エラーです – wolfgunner

答えて

0

GMPタイプと同様に、mpfr_tはサイズ1の配列です(要素は構造体ですが、実際にそのことを知る必要はありません)。

  1. 呼び出し側が割り当てられ、いくつかの特定の精度でmpfr_tのINIT:あなたはMPFR番号を返す関数を書くことを決めた場合は、(特に)2の可能性があります。この場合、mpfr_tを関数の引数として置き、これは実際に渡される(C言語の規則に従って)この配列へのポインタです。基本的に、これは変数by referenceを渡すと見ることができます。 MPFR関数はこのメソッドを使用します。
  2. 発信者は何も割り当てません。関数のプロトタイプは、関数がポインタmpfr_ptrを構造体に返すようなものでなければなりません。したがって、この関数は、mallocと通常はmpfr_tを割り当て(関数が返ってもメモリが解放されないように)、mpfr_init2で構造体を初期化します。精度はこの関数で選択するか、引数として渡すことができます。

注:プログラムにはさまざまなタイプミスがありますが、これはこの問題のポイントではないと思います。

0

mpfr_t他の配列型と同様に、戻り値の型はcannot be usedです。 #1592を参照してください。

mpfr_tの値を返すには、すべてのMPFR関数が使用する規約に従って、関数のパラメータに戻してください。

あなたのコード内の別のエラーがあります:mpfr_get()は(慣例に従って、haven`tは、実際にMPFRのドキュメントで、このような機能を発見した)intを返すべきではなく、mpfr_t、上記を参照してください。

関連する問題