![]() |
Home | Libraries | People | FAQ | More |
#include <boost/math/special_functions/expint.hpp>
namespace boost{ namespace math{ template <class T> calculated-result-type expint(unsigned n, T z); template <class T, class Policy> calculated-result-type expint(unsigned n, T z, const Policy&); }} // namespaces
函數返回值的類型使用返回值類型推導法則來確定:如果T是int型,那麼返回值的類型是double, 否則返回值類型為T.
最後一個策略 參數是可選的並且可以用來控制函數的行為: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。
template <class T> calculated-result-type expint(unsigned n, T z); template <class T, class Policy> calculated-result-type expint(unsigned n, T z, const Policy&);
返回z的指數積分 En
下面的表顯示了不同平台上的不同浮點類型的峰值誤差 (10的-5次方數量級) , 以及與 Cody 的SPECFUN 以及GSL-1.9 庫的比較. 除非指定了任意的更窄的浮點類型,否則返回值會具有 有效的零誤差.
這些函數的測試由兩部分構成: 基本的合理性測試(sanity checks)使用Mathworld's 在線計算器計算出的測試數據,而精度測試使用精度為1000-bit的NTL::RR 庫和這個庫的實現產生的數據. 注意:這些函數的通用和類型特定的版本在內部使用不同的實現, 因北這就可以給出相互獨立的測試數據. 使用我們的測試數據來測試"已知良好的(known good)" 的實現同樣也給出一個合理性的測試(sanity checks).
函數的一般形式使用連分數 ( continued fraction):
對於大數 x 以及無限級數:
對於較小的數x.
當x的精度在編譯是可知且精度為 113 bits或更少的時候, 那麼將會針對n == 1的情況使用由 JM 發明的有理數逼近.
對於 x <
1,使用的逼近形式是一個極值逼近:
且對於x >
1 使用一個 賽貝謝夫內插逼近 形式: