Ошибка подтверждения в mpfr_get_str в то время как в версии, но не в конфигурации отладки - PullRequest
0 голосов
/ 04 июня 2019

Я делаю вычисления Пи по формуле Рамануджана, все хорошо, пока я не решу напечатать результат.

Я конвертирую его в строку так:

 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.

Запрошенные дополнения


  1. Выход mpfr_dump:

    0.0000000000000000000000000000010010001100000000111100101100000000011011110111110010010110011010000000E-1!!!N!!!

  2. Вывод ошибки подтверждения:

    C:\projects\vcpkg\buildtrees\mpfr\src\mpfr-4.0.1\src\get_str.c:157: MPFR assertion failed: size_s1 >= m

  3. Выход mpfr_dump in Отладка конфигурация:

    0.1010001011111001100000110110111001001110010001000001010100101001111111000010011101010111110100100000E-1

  4. Точность задается через следующую строку:

    mpfr_set_default_prec(programOptions->GetPrecision());
    
  5. Пи рассчитывается так:

    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);
    
...