#include <boost/math/special_functions/log1p.hpp>
namespace boost{ namespace math{
template <class T>
calculated-result-type log1p(T x);
template <class T, class Policy>
calculated-result-type log1p(T x, const Policy&);
}} 
Возвращает естественный логарифм<x+1>.
Тип возврата этой функции вычисляется с использованием правил расчета типа результата.: Возвращение<double>, когдаxявляется целым типом, а T иначе.
Окончательный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Есть много ситуаций, когда желательно вычислить<log(x+1)>. Однако для малых<x>тогда<x+1>страдает от катастрофических ошибок отмены, так что<x+1==1>и<log(x+1)==0>, когда на самом деле для очень маленьких x наилучшим приближением к<log(x+1)>будет<x>.<log1p>вычисляет наилучшее приближение к<log(1+x)>с использованием расширения серии Тейлора для точности (менее 2ɛ). В качестве альтернативы отметим, что существуют более быстрые методы, например, с использованием эквивалентности:
log(1+x) == (log(1+x) * x) / ((1+x) - 1)
Тем не менее, опыт показал, что эти методы, как правило, довольно эффектно выходят из строя после включения оптимизаций компилятора, поэтому они используются только тогда, когда известно, что они не порвутся с конкретным компилятором. Напротив, метод расширения серии, по-видимому, достаточно неуязвим для ошибок, вызванных оптимизатором.
Наконец, когда BOOST_HAS_LOG1P определена, тогда<float/double/longdouble>специализации этого шаблона просто перенаправляются на нативную (POSIX) реализацию этой функции.
Следующий график иллюстрирует поведение log1p:

Для встроенных в плавающие точки типов<log1p>должно быть приблизительно 1 эпсилон точности.
Table 6.78. Error rates for log1p
| 
               | 
                 Microsoft Visual C++ версия 12.0 Win32 двойная 
               | 
                 GNU C++ версия 5.1.0 Linux Double 
               | 
                 GNU C++ версия 5.1.0 Linux длинный двойной 
               | 
                 Солнечный компилятор версии 0x5130 Солнечный солярис
  
               | 
Случайные тестовые данные  | 
Max = 0,509ε (Mean = 0,057ε)
  :Max = 0,509ε (Mean = 0,057ε)]  | 
Макс = 0.846ε (Средний = 0,153ε)
  Rmath 3.0.2:Макс = 0.846ε (Средний = 0,153ε)] Цефес:Макс = 0.799ε (Средний = 0,122ε)]  | 
Max = 0.818ε (Mean = 0.227ε)
  :Max = 0.818ε (Mean = 0.227ε)] :Max = 0.818ε (Mean = 0.227ε)]  | 
Макс = 1.53ε (Средний = 0.627ε)
  :Макс = 0.818ε (Средний = 0.249ε)]  | 
 
 
Смесь проверок здравомыслия спот-тестов и случайных значений высокоточных испытаний, рассчитанных с использованием NTL::RR с точностью 1000 бит.