[英]creating math constants of variable precision using Boost mpfr_float, such as pi or e
我正在使用Boost.Multiprecision來圍繞mpfr后端進行包裝,而在創建pi(以及e或任何其他數學常數)到我想要的精度時遇到了一些麻煩。 我覺得我想做的事情應該可行,因為在Boost.Multiprecision的教程頁面上將Boost.Math用作常量 。 在本教程中,他們使用諸如cpp_dec_float_50
之類的固定精度數字類型-我想使用variable_precision mpfr_float
做到這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,但只有pi的約165位數字,這由輸出語句的結果證明,該輸出語句確定我的pi
的精度為1000,並打印大約165個正確的數字,並且約835個零。 這顯然是錯誤的。
是否可以高精度地制作boost :: multiprecision :: mpfr_float並填充來自boost :: math :: constants的常量?
請注意,我需要使用可變精度類型,而其他的高精度但固定精度類型則不是一種選擇。 我必須能夠在運行時即時更改精度。
Boost標頭中嵌入的常量的精度有限,您已經達到了這個極限。 如果您需要pi的高精度版本(例如),則需要自己提供。
例如,標題中boost::math::constants::pi
的定義是:
BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884e+00, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00")
-https://github.com/boostorg/math/blob/master/include/boost/math/constants/constants.hpp
(順便說一句,此定義僅給出小數點后110位數字。超出的任何數字都可能不正確!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.