![]() |
Home | Libraries | People | FAQ | More |
#include <boost/math/special_functions/factorials.hpp>
namespace boost{ namespace math{ template <class T> T factorial(unsigned i); template <class T, class Policy> T factorial(unsigned i, const Policy&); template <class T> T unchecked_factorial(unsigned i); template <class T> struct max_factorial; }} // namespaces
template <class T> T factorial(unsigned i); template <class T, class Policy> T factorial(unsigned i, const Policy&);
返回i!.
最後一個策略 參數是可選的並且可以用來控制函數的行為: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。
當i <= max_factorial<T>::value時,階乘的值是通過表查找來計算的, 對於較大的i值, 階乘函數是以 tgamma函數的方式來實現的。
如果i的值太大以至於結果無法在T類型中進行表示, 那麼就調用 溢出錯誤.
template <class T> T unchecked_factorial(unsigned i);
返回i!.
在這個函數內部是通過表查找來計算階乘結果. 更進一步,它並沒有對i的值進行範圍檢查:由用戶來確保i <= max_factorial<T>::value. 這個函數打算用在需要快速表查找的內部循環中, 但是要求注意確保i的值永遠都不會增長得太在。
template <class T> struct max_factorial { static const unsigned value = X; };
特性類(traits class,也稱作萃取類) 定義了可以傳遞給unchecked_factorial的最大值。成員變量value 可以用在需要整型常量的地方: 用於定義依賴於這個階乘函數的查找表的大小.
對於小於max_factorial<T>::value
的變量,結果應當進行正確的捨入. 對於大的參數值,精度和tgamma一樣。
基本的合理性檢查(sanity check)以及用於檢測階乘查找表正確性的抽樣數據: 對於tgamma 函數的主要測試已經處理了這些情況.
對於較小的參數,階乘函數是以查找表的形式來實現的, 對於較大的參數是以tgamma 函數來實現的.