发行版中mpfr_get_str断言失败,但调试配置中未断言

时间:2019-06-03 22:46:38

标签: c++ mpfr

我正在使用Ramanujan公式进行Pi的计算,直到我决定打印结果为止,一切都很好。

我将其转换为字符串,如下所示:

 auto pi_str = std::string(mpfr_get_str(NULL, &exp, 10, programOptions->GetPrecision(), pi, MPFR_RNDN));

programOptions->GetPrecision()是我程序的某些输入参数,但在失败时为100。

仅当配置为Release(发布)时,它才在get_str.c at line 157.中失败,我对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. Debug 配置中输出mpfr_dump

    0.1010001011111001100000110110111001001110010001000001010100101001111111000010011101010111110100100000E-1

  4. 精度通过以下行设置:

    mpfr_set_default_prec(programOptions->GetPrecision());
    
  5. Pi的计算方式如下:

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

0 个答案:

没有答案