создание математических констант переменной точности с использованием Boost mpfr_float, например pi или e

Я использую Boost.Multiprecision для оберток вокруг бэкэнда mpfr, и у меня возникают некоторые проблемы с созданием pi (и e или любой другой математической константы) с желаемой точностью. Я чувствую, что то, что я хочу сделать, должно быть возможным из-за использованияBoost.Math для констант научебная страница для Boost.Multiprecision, В учебном пособии они используют числа с фиксированной точностью типов, таких какcpp_dec_float_50 - я хочу сделать это с variable_precisionmpfr_float, Проверьте следующий код:

#include <boost/multiprecision/mpfr.hpp>
#include <boost/math/constants/constants.hpp>
#include <iostream>

...
int main() {
    boost::multiprecision::mpfr_float::default_precision(1000);
    boost::multiprecision::mpfr_float pi = boost::math::constants::pi<boost::multiprecision::mpfr_float>();
    std::cout << std::fixed;
    std::cout.precision(1000);
    std::cout << pi.precision() << " " << pi << std::endl;
}

Результатом является число,pi, который имеет точность 1000, но имеет только ~ 165 цифр числа Пи, о чем свидетельствует результат выходных операторов, которые подтверждают, что мойpi имеет точность 1000 и печатает около 165 правильных цифр и ~ 835 нулей. это явно неправильно.

Можно ли сделать boost :: multiprecision :: mpfr_float с высокой точностью, заполненный константами из boost :: math :: constants?

Обратите внимание, что янеобходимость использовать тип переменной точности, и что другие типы с высокой, но фиксированной точностью не являются опцией. Я должен быть в состоянии изменить точность на лету во время выполнения.

Ответы на вопрос(1)

Ваш ответ на вопрос