Печать в файл из MPFR

Я хочу напечатать результат расчета, используя 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_file в mpfr_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();
}

2 ответа

Решение

Можно использовать методы 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);
  }

После небольшой работы я нашел это, чтобы заменить нижние 4 строки кода:

FILE* my_file;
my_file = fopen("output.txt", "w");
mpfr_out_str(my_file, 2, 0, x, MPFR_RNDN);
fclose(my_file);
Другие вопросы по тегам