crear constantes matemáticas de precisión variable utilizando Boost mpfr_float, como pi o e

Estoy usando Boost.Multiprecision para envoltorios alrededor del backend mpfr, y tengo algunos problemas para crear pi (ye o cualquier otra constante matemática) con la precisión deseada. Siento que lo que quiero hacer debería ser posible, debido al uso deBoost.Math para constantes en unpágina de tutorial para Boost.Multiprecision. En el tutorial, usan números de tipos de precisión fija comocpp_dec_float_50 - Quiero hacerlo con variable_precisionmpfr_float. Mira el siguiente código:

#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;
}

El resultado es un número,pi, que tiene una precisión de 1000, pero solo tiene ~ 165 dígitos de pi, como lo demuestra el resultado de las declaraciones de salida, que confirman que mipi tiene una precisión de 1000 e imprime aproximadamente 165 dígitos correctos y ~ 835 ceros. Esto está claramente mal.

¿es posible hacer un boost :: multiprecision :: mpfr_float con alta precisión poblada con constantes de boost :: math :: constants?

Tenga en cuenta que yonecesitar usar un tipo de precisión variable, y que otros tipos de precisión alta pero fija no son una opción. Debo poder cambiar la precisión sobre la marcha en tiempo de ejecución.

Respuestas a la pregunta(1)

Su respuesta a la pregunta