Я делаю вычисления Пи по формуле Рамануджана, все хорошо, пока я не решу напечатать результат.
Я конвертирую его в строку так:
auto pi_str = std::string(mpfr_get_str(NULL, &exp, 10, programOptions->GetPrecision(), pi, MPFR_RNDN));
Где programOptions->GetPrecision()
- это некоторый входной параметр моей программы, но на момент сбоя он равен 100.
Сбой в get_str.c at line 157.
возможен только при конфигурации Release, я вроде как новичок в MPFR и не знаю, как поступить. Ребята, вы случайно не сталкивались с таким делом?
Я покажу больше кода или необходимой информации, но я действительно думаю, что этого должно быть достаточно. Моя версия mpfr 4.0.1.
Запрошенные дополнения
Выход mpfr_dump
:
0.0000000000000000000000000000010010001100000000111100101100000000011011110111110010010110011010000000E-1!!!N!!!
Вывод ошибки подтверждения:
C:\projects\vcpkg\buildtrees\mpfr\src\mpfr-4.0.1\src\get_str.c:157: MPFR assertion failed: size_s1 >= m
Выход mpfr_dump
in Отладка конфигурация:
0.1010001011111001100000110110111001001110010001000001010100101001111111000010011101010111110100100000E-1
Точность задается через следующую строку:
mpfr_set_default_prec(programOptions->GetPrecision());
Пи рассчитывается так:
mpfr_t pi;
mpfr_init(pi);
mpfr_set_d(pi, 0.0, MPFR_RNDN);
for (auto threadId = 0; threadId < futures.size(); ++threadId)
mpfr_add(pi, pi, futures[threadId].get(), MPFR_RNDN);