c - MPFR 未正确复制数据

标签 c math gmp mpfr

#include <stdio.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>

mpf_t epi;

int main(int argc, char * * argv)
{
    mpf_t e;
    mpf_t pi;
    mpfr_t er;
    mpfr_t pir;
    FILE *a;
    FILE *b;

    a = fopen(argv[1], "r");
    b = fopen(argv[2], "r");
    mpf_set_default_prec(1024048);
    mpf_init(e);
    mpf_init(pi);
    mpfr_set_default_prec(1024048);
    mpfr_init(er);
    mpfr_init(pir);

    gmp_fscanf(a, "%Ff", &e);
    gmp_fscanf(b, "%Ff", &pi);
    fclose(a);
    fclose(b);

    mpfr_set_f(er, e, GMP_RNDN);
    mpfr_set_f(pir, pi, GMP_RNDN);

    gmp_printf("e: %.100Ff\np: %.100Ff\n", e, pi);
    mpfr_printf("e: %.100Ff\np: %.100Ff\n", er, pir);

}

代码似乎都是正确的,它应该将 e 复制到 er,将 pi 复制到 pir。当我运行该程序时,这就是我得到的:

Ethans-MacBook-Pro:epi phyrrus9$ ./epi a.txt b.txt 
e: 2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274
p: 3.1415926535897932384626433832795028841971693993750806787344699335531291632367535989328301032625839375
e: 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
p: 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

我的问题是,我使用的舍入模式是否存在问题?因为第二个e和p不应该为零。

最佳答案

复印工作正常,只是打印有问题。

如果你看5.9.2 in the manual ,您会发现应使用 %Rf 指定 mpfr_t 值,而不是为 mpf_t 保留的 %Ff >.

关于c - MPFR 未正确复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20643061/

相关文章:

math - 求因子总和

arrays - 查找数组中的连接组件

python - 哪里有 Gmpy 文档?

c - 如何在C中创建没有缓冲区的管道?

c - C 中的 gets() 函数

c - 非法指令 : 4 in C-program

c - 如何将recv()接收到的二进制数据写入文件

java - aa568 是什么样的数字以及如何在 Java 中从十进制转换为它?

c++ - Pollard Rho 在不太大的输入上崩溃

c++ - 在 C++ Ubuntu 12.04 上使用 GMP