Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

精度策略(Precision Policies)

有兩個等價的策略來影響計算結果時的精度,這些策略缺省為0-意思是以這個使用的類型的 最大精度來進行計算-但也可以設置為其它的值來降低計算時所使用的精度。

namespace boost{ namespace math{ namespace policies{

template <int N>
digits10;

template <int N>
digits2;

}}} // namespaces

就如你可能想到的那樣,digits10 指定使用的十進制數字,digits2 指定二進制數字位數。在內部實現中,無論使用哪一個,精度都被轉化為二進制數字位數

這個策略在編譯時設定,因為大多數的特殊函數都是在編譯時依據所要求的精度以及使用的數值類型來選擇合適的逼近方法。

例如,我們可以將函數tgamma的計算設為5個十進制數字,使用:

#include <boost/math/special_functions/gamma.hpp>

using namespace boost::math;
using namespace boost::math::policies;

typedef policy<digits10<5> > pol;

double t = tgamma(12, pol());

或者使用make_policy

#include <boost/math/special_functions/gamma.hpp>

using namespace boost::math;
using namespace boost::math::policies;

double t = tgamma(12, policy<digits10<5> >());

並對一個分佈的分位點近似到25個十進制數字:

#include <boost/math/distributions/normal.hpp>

using namespace boost::math;
using namespace boost::math::policies;

double q = quantile(
      normal_distribution<double, policy<digits2<25> > >(), 
      0.05);


PrevUpHomeNext