Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

log1p

Boost , Math Toolkit 2.5.0 , Basic Functions

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
#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&);
}} // namespaces

Возвращает естественный логарифм<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:

Accuracy

Для встроенных в плавающие точки типов<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ε)]


Testing

Смесь проверок здравомыслия спот-тестов и случайных значений высокоточных испытаний, рассчитанных с использованием NTL::RR с точностью 1000 бит.


PrevUpHomeNext

Статья log1p раздела Math Toolkit 2.5.0 Basic Functions может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Basic Functions ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:07:30/0.0032138824462891/0