4

私はGMPを使用していますが、をすばやくに変換できるようにしたいと考えてmpzmpfます。私は図書館を調べましたが、あまり見つかりませんでした。私が考えることができた最高のものはこれでした:

mpz_t x;
/* Insert code here that assigns some value to x */
char buf[SIZE];
gmp_sprintf(buf, "%Zd", x);
mpf_t y;
mpf_set_str(y, buf);

このソリューションでは、文字列との間で繰り返し変換する必要があります。また、によって制限されており、必要SIZEな大きさを事前に決定する方法がわかりませSIZEん。この変換を行うためのより良い方法はありますか?

4

2 に答える 2

8

使用するのはmpf_set_z (mpf_t rop, mpz_t op)どうですか?

また(これを行ったと思います)mpz変数とmpf変数はとで初期化する必要がありmpf_init(mpf_t x)ますmpz_init(mpz_t x)

だからあなたはするだろう:

mpz_t x;
mpz_init(x);
/* Insert code here that assigns some value to x */
mpf_t y;
mpf_init(y);
mpf_set_z(y,x);
于 2010-01-24T00:56:10.690 に答える
2

うわー、評判が悪いので、そのsprintfような機能も含まれていることに驚いています。

mpz_sizeinbase整数の基数10の表現を保持するために必要なスペースの量を把握するために使用できます。そして、正解した他の人はmpf_set_z、整数を10進数の文字列に変換し、それを浮動小数点数に読み戻すよりもはるかに優れた方法です。

于 2010-01-24T02:13:27.597 に答える