![]() |
Home | Libraries | People | FAQ | More |
通常,在以float精度計算一個函數的時候,在函數內部通過構造一個double精度的計算來確保精度,並將結果進行捨入: 有兩個策略來影響內部的提升是否進行:
|
策略 |
含義 |
|---|---|
|
|
指示在函數內部, |
|
|
指示在函數內部, |
假設我們想要函數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>()));
另一方面,假設我們想要一個分佈在進行計算時不進行從float 到 double的精度提升,那麼我們應該使用:
#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);