Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

為特定基礎的分佈設置策略(Setting Policies for Distributions on an Ad Hoc Basis)

在這個庫中的所有的統計分佈類型都是具有兩個參數的類模板,這兩個參數都有有意義的缺省值,例如:

namespace boost{ namespace math{

template <class RealType = double, class Policy = policies::policy<> >
class fisher_f_distribution;

typedef fisher_f_distribution<> fisher_f;

}}

這個策略被所有的接收一個策略作為參數的訪問函數使用(accessor function),並且在所有的調用這些策略的函數之前。所以,如果你使用這些分佈類型的short-typedef,那麼你將使用double精度的計算以及所有的缺省策略。

然而,假設我們想要以float精度計算二項分佈的分位點,沒有進行內部的從float到double的類型提升,並且將結果捨入到最接近的整數,那麼這裡是相應的實現方法:

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

//
// 定義一個策略類型
// 滿足我們需要的特性:
//
using namespace boost::math::policies;
typedef policy<
   promote_float<false>,
   discrete_quantile<integer_round_nearest>
> mypolicy;
//
// 然後定義一個使用這個策略的分佈:
//
typedef boost::math::binomial_distribution<float, mypolicy> mybinom;
//
//  然後使用這個分佈來計算分位點:
//
int main()
{
   std::cout << "quantile is: " <<
      quantile(mybinom(200, 0.25), 0.05) << std::endl;
}

輸出結果為:

quantile is: 40

PrevUpHomeNext