Erstellen von mathematischen Konstanten mit variabler Genauigkeit mit Boost mpfr_float wie pi oder e

Ich verwende Boost.Multiprecision für Wrapper im mpfr-Backend und habe einige Probleme, pi (und e oder eine andere mathematische Konstante) mit der gewünschten Genauigkeit zu erstellen. Ich habe das Gefühl, dass das, was ich tun möchte, aufgrund der Verwendung von @ möglich sein sollt Boost.Math für Konstanten auf einen Tutorial-Seite für Boost.Multiprecision. Im Lernprogramm werden Zahlen mit fester Genauigkeit verwendet, z. B.cpp_dec_float_50 - Ich möchte es mit variable_precision tunmpfr_float. Überprüfen Sie den folgenden Code:

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

Das Ergebnis ist eine Zahl,pi, das eine Genauigkeit von 1000 hat, aber nur ~ 165 Stellen pi hat, wie das Ergebnis der Ausgabeanweisungen zeigt, die bestätigen, dass meinpi hat eine Genauigkeit von 1000 und gibt ungefähr 165 korrekte Stellen und ~ 835 Nullen aus. das ist eindeutig falsch.

Ist es möglich, einen Boost :: Multiprecision :: Mpfr_float mit hoher Genauigkeit durchzuführen, der mit Konstanten aus Boost :: Math :: Konstanten gefüllt ist?

Beachten Sie, dass ichbrauche, um einen Typ mit variabler Genauigkeit zu verwenden, und dass andere Typen mit hoher, aber fester Genauigkeit keine Option sind. Ich muss in der Lage sein, die Präzision während der Laufzeit zu ändern.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage