mpfr バックエンドのラッパーに Boost.Multiprecision を使用していますが、希望の精度で pi (および e またはその他の数学定数) を作成する際に問題が発生しています。Boost.Multiprecision のチュートリアルページで定数にBoost.Math を使用しているため、やりたいことが可能になるはずです。チュートリアルでは、 - I want to do it with variable_precisionなどの型の固定精度数を使用しています。次のコードを確認してください。cpp_dec_float_50
mpfr_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 桁しかありません。これは、 mypi
が精度 1000 であることを確認し、約 165 の正しい桁を出力し、約 835 を出力します。ゼロ。これは明らかに間違っています。
boost::multiprecision::mpfr_float を高精度で、boost::math::constants の定数を使用して作成することは可能ですか?
可変精度型を使用する必要があることに注意してください。また、他の高精度で固定精度の型はオプションではないことに注意してください。実行時にオンザフライで精度を変更できる必要があります。