2
我有一个程序,它将字符串中的数字读入到mpz_t中,然后将其转换为mpf_t。尽管从文件中正确读取,但我将它们转换为mpf_t时会出现精度损失。代码如下:使用GMP精确丢失
#include <gmp.h>
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv) {
char* str = "632512364206354367378453";
mpz_t x;
mpz_init_set_str(x, str, 10);
mpf_t a;
mpf_init(a);
mpf_set_z(a, x);
gmp_printf("mpz_t: %Zd\n", x);
gmp_printf("mpf_t: %Ff\n", a);
}
这个例子的输出是:
mpz_t: 632512364206354367378453
mpf_t: 632512364206354367378000.000000
正如你所看到的最后3个位数是不正确的。我怎样才能避免这种情况?是否有任何其他功能来执行此转换?
由于
是否有任何函数可以从mpz_t中获取精度,然后我可以使用它来初始化mpf_t? – fc67 2015-02-24 21:26:41
@ fc67'mpz_sizeinbase'可以提供帮助。 – 2015-02-24 22:08:42