Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

指數積分 En

概要

#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 庫的比較. 除非指定了任意的更窄的浮點類型,否則返回值會具有 有效的零誤差.

表45.函數 expint(n, z) 的出錯率(Errors Rates)

有效數字位數

平台和編譯器

En

E1

53

Win32, Visual C++ 8

峰值=7.1 均值=1.8

Cephes 峰值=5.1 均值=1.3

峰值=0.99 均值=0.5

Cephes 峰值=3.1 Mean=1.1

64

RedHat Linux IA_EM64, gcc-4.1

峰值=9.9 均值=2.1

峰值=0.97 均值=0.4

64

Redhat Linux IA64, gcc-4.1

峰值=9.9 均值=2.1

峰值=0.97 均值=0.4

113

HPUX IA64, aCC A.06.06

峰值=23.3 均值=3.7

峰值=1.6 均值=0.5


測試

這些函數的測試由兩部分構成: 基本的合理性測試(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 使用一個 賽貝謝夫內插逼近 形式:

 


PrevUpHomeNext