gpt4 book ai didi

c++ - GMP 的精度损失

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:57 25 4
gpt4 key购买 nike

我有一个程序可以从字符串中读取数字到 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 位数字不正确。我怎样才能避免这种情况?还有其他函数可以执行此转换吗?

谢谢

最佳答案

来自manual page :

Function: void mpf_init (mpf_t x)

Initialize x to 0. Normally, a variable should be initialized once only or at least be cleared, using mpf_clear, between initializations. The precision of x is undefined unless a default precision has already been established by a call to mpf_set_default_prec.

这是你的问题。

解决方法:

Function: void mpf_init2 (mpf_t x, mp_bitcnt_t prec)

Initialize x to 0 and set its precision to be at least prec bits. Normally, a variable should be initialized once only or at least be cleared, using mpf_clear, between initializations.

这样,您可以使用 prec 精度计数参数来指定您想要的精度位数。

关于c++ - GMP 的精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com