【发布时间】:2015-04-26 15:25:17
【问题描述】:
我有一个程序,它从字符串中读取数字到 mpz_t,然后将其转换为 mpf_t。尽管从文件中正确读取,但当我将它们转换为 mpf_t 时存在精度损失。代码如下:
#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 位数字不正确。我怎样才能避免这种情况?是否有任何其他函数可以执行此转换?
谢谢
【问题讨论】:
标签: c++ c precision floating-point-precision gmp