![]() |
Home | Libraries | People | FAQ | More |
有一些函數很通用 (對於所有支持的分佈類型都提供了)但是對於一些特定的分佈可能在數學上沒有定義這些通用的函數。
例如,柯西分佈( Cauchy distribution )就沒有均值,因此下面的代碼應當返回什麼值呢?
mean(cauchy<>());
這種代碼是否都不能通過編譯呢?
缺省的行為是這些函數不能編譯通過-實際上它們將會產生一個靜態斷言(static assertion) -但是通過改變策略我們可以讓這些函數返回一個定義域錯誤(依賴於錯誤處理策略,也可能拋出一個異常)。
這種行為由assert_undefined<> 策略控制:
namespace boost{ namespace math{ namespace policies { template <bool b> class assert_undefined; }}} //namespaces
例如:
#include <boost/math/distributions/cauchy.hpp> using namespace boost::math::policies; using namespace boost::math; // 這種代碼不能通過編譯,柯西分佈沒有均值! double m1 = mean(cauchy()); // 這可以通過編譯,但是會產生一個定義域錯誤! double m2 = mean(cauchy_distribution<double, policy<assert_undefined<false> > >());