Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

內部提升策略(Internal Promotion Policies)

通常,在以float精度計算一個函數的時候,在函數內部通過構造一個double精度的計算來確保精度,並將結果進行捨入: 有兩個策略來影響內部的提升是否進行:

策略

含義

boost::math::policies::promote_float<B>

指示在函數內部, float 參數是否被提升為 double 精度:缺省為boost::math::policies::promote_float<true>

boost::math::policies::promote_double<B>

指示在函數內部, double 參數是否被提升為 long double 精度:缺省為boost::math::policies::promote_double<true>

例子

假設我們想要函數tgamma 在計算時不會提升為long double精度,那麼我們應當使用

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

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

// 定義一個策略:
typedef policy<
      promote_double<false> 
      > my_policy;
      
// 調用這個函數:
double t1 = tgamma(some_value, my_policy());

// 另一方面,我們可以使用函數 make_policy 在調用點定義所需要的策略:
double t2 = tgamma(some_value, make_policy(promote_double<false>()));

另一方面,假設我們想要一個分佈在進行計算時不進行從floatdouble的精度提升,那麼我們應該使用:

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

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

// 定義策略:
typedef policy<
      promote_float<false>
      > my_policy;

// 定義分佈:
typedef normal_distribution<float, my_policy> my_norm;

// 獲取分位點:
float q = quantile(my_norm(), 0.05f);


PrevUpHomeNext