我正在将 Boost.Multiprecision 用于 mpfr 后端的包装器,并且在将 pi(和 e 或任何其他数学常数)创建到我想要的精度时遇到了一些麻烦。我觉得我想做的事情应该是可能的,因为在Boost.Multiprecision的教程页面上使用了Boost.Math 作为常量。在本教程中,他们使用固定精度数的类型,例如——我想用 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 位 pi,正如输出语句的结果所证明的那样,它确认 mypi
的精度为 1000,并打印大约 165 个正确数字,以及约 835零。这显然是错误的。
是否可以使用 boost::math::constants 中的常量填充高精度的 boost::multiprecision::mpfr_float?
请注意,我需要使用可变精度类型,并且不能选择其他高精度但固定精度的类型。我必须能够在运行时动态更改精度。