#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&);
}}
Возвращение ex— 1.
Тип возврата этой функции вычисляется с использованием правил расчета типа результата.:<double
>, когдаxявляется целым типом, а T иначе.
Окончательный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документацию по политикедля более подробной информации.
Для малого x<ex
>очень близко к 1, в результате вычисление<ex- 1
>приводит к катастрофическим ошибкам отмены, когда x мало.<expm1
>вычисляет<ex- 1
>с использованием рациональных приближений (до 128-битных длинных двойников), в противном случае с помощью расширения серии, когда x невелик (давая точность менее 2ɛ).
Наконец, когда BOOST_HAS_EXPM1 определен, специализации этого шаблона<float/double/longdouble
>просто перенаправляются на нативную реализацию этой функции платформы (POSIX).
Следующий график иллюстрирует поведение expm1:

Для построенных в плавающей точке типов<expm1
>должно быть приблизительно 1 эпсилон точности.
Table 6.79. Error rates for expm1
|
Microsoft Visual C++ версия 12.0 Win32 двойная
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Солнечный компилятор версии 0x5130 Солнечный солярис
|
Случайные данные |
Max = 0.996ε (Mean = 0.283ε)
:Max = 1.31ε (Mean = 0.496ε)] |
Макс = 0,793ε (Средний = 0,126ε)
Rmath 3.0.2:Макс = 0,793ε (Средний = 0,126ε)] Цефес:Макс = 1,53ε (Средний = 0,535ε)] |
Макс = 0.992ε (Средний = 0.402ε)
:Макс = 1.26e+19ε (Средний = 4.89e+18ε)И другие сбои.) :Макс = 0,92ε (Средний = 0,402ε) |
Max = 1.31ε (Mean = 0.406ε)
:Max = 0.996ε (Mean = 0.426ε)] |
Смесь проверок здравомыслия спот-тестов и случайных значений высокоточных испытаний, рассчитанных с использованием NTL::RR с точностью 1000 бит.