Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

expm1

#include <boost/math/special_functions/expm1.hpp>

namespace boost{ namespace math{

template <class T>
calculated-result-type expm1(T x);

template <class T, class Policy>
calculated-result-type expm1(T x, const Policy&);

}} // namespaces

返回 ex - 1.

函數返回值的類型使用返回值推導法則:來確定,當x是整型的時候,返回值的類型是double,否則返回值是類型是T.

最後一個策略 參數是可選的並且可以用來控制函數的行為: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。

對於值較小的 x, ex 的值非常接近於 1, 因此當x很小時計算ex - 1 將會導致一個巨量消失誤差( catastrophic cancellation errors ). expm1 使用有理數逼近來計算ex - 1 (針對於達到 128-bit long double 值),否則的話,當x較小時使用級數展開來計算 (給出的精度小於 2ɛ).

最後,當定義了 BOOST_HAS_EXPM1 時,float/double/long double 這些模板的特化只是簡單的調用這些平台(POSIX)定義的函數。

下面的圖像顯示了 expm1的特性:

精確性

對於內建的浮點類型,expm1 具有近似於 1 epsilon(10的-5次方) 的精確度。

測試

混合的抽樣測試, 隨機的高精度的測試數據使用1000-bits精度的 NTL::RR 庫產生的數據。


PrevUpHomeNext