0

我想使用 to file 打印计算结果,MPFR但我不知道如何。MPFR用于进行高精度的浮点运算。要打印mpfr_t数字,请使用以下功能:

size_t mpfr_out_str (FILE *stream, int base, size t n, mpfr t op, mp rnd t rnd)

我想我的问题是我不了解FILE*对象以及它们与fstream对象的关系。

如果我my_filempfr_out_str行更改为,stdout那么该数字将按我希望的方式打印到屏幕上,但我不知道如何将其放入文件中。

#include <mpfr.h>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
   mpfr_t x;
   mpfr_init(x);
   mpfr_set_d(x, 1, MPFR_RNDN);

   ofstream my_file;
   my_file.open("output.txt");
   mpfr_out_str(my_file, 2, 0, x, MPFR_RNDN);
   my_file.close();
}
4

2 回答 2

1

可以将 std::ostream 方法与 mpfr 函数(如 mpfr_as_printf 或 mpfr_get_str)一起使用。但是,它需要额外的字符串分配。

  #include <mpfr.h>
  #include <iostream>
  #include <fstream>
  using namespace std;
  int main() {
     mpfr_t x;
     mpfr_init(x);
     mpfr_set_d(x, 1, MPFR_RNDN);

     ofstream my_file;
     my_file.open("output.txt");

     char* outString = NULL;
     mpfr_asprintf(&outString, "%RNb", x);
     my_file << outString;
     mpfr_free_str(outString);
     my_file.close();

     mpfr_clear(x);
  }
于 2016-08-08T13:50:09.453 回答
0

经过不多的工作,我发现它可以替换底部的 4 行代码:

FILE* my_file;
my_file = fopen("output.txt", "w");
mpfr_out_str(my_file, 2, 0, x, MPFR_RNDN);
fclose(my_file);
于 2016-08-08T13:39:15.313 回答