![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
GammaBoost , Math Toolkit 2.5.0 , Gamma Functions
|
Microsoft Visual C++ версия 12.0 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Солнечный компилятор версии 0x5130 |
|
---|---|---|---|---|
факториалы |
Max = 1,85ε (Mean = 0,491ε) |
Max = 0ε (Mean = 0ε) |
Макс = 1,96ε (Mean = 0,483ε) |
Макс = 172ε (Mean = 41ε) |
около 0 |
Макс = 1.96ε (Средний = 0.684ε) |
Макс = 0ε (Mean = 0ε) |
Макс = 2ε (Mean = 0.73ε) |
Макс = 2ε (Средний = 0.647ε) |
около 1 |
Макс = 2ε (Mean = 0.865ε) |
Макс = 0ε (Средний = 0ε) |
Макс = 2ε (Mean = 0.85ε) |
Макс = 3.01ε (Средний = 1,06ε) |
около 2 |
Max = 2ε (Mean = 0.995ε) |
Макс = 0ε (Mean = 0ε) |
Макс = 2ε (Mean = 0.913ε) |
Макс = 5.01ε (Средний = 1,89ε) |
около -10 |
Max = 1,73ε (Mean = 0,729ε) |
Макс = 0ε (Mean = 0ε) |
Max = 2.6ε (Mean = 0.985ε) |
Макс = 1,75ε (Средний = 0,819ε) |
около -55 |
Max = 1.8ε (Mean = 0.817ε) |
Макс = 0ε (Mean = 0ε) |
Макс = 1.8ε (Mean = 0.847ε) |
Макс = 98.5ε (Средний = 53.4ε) |
Table 6.2. Error rates for tgamma1pm1
Microsoft Visual C++ версия 12.0 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Солнечный компилятор версии 0x5130 |
|
---|---|---|---|---|
tgamma1pm1(dz) |
Макс = 0,982ε (Средний = 0,399ε) |
Макс = 0ε (Средний = 0ε) |
Макс = 1,12ε (Средний = 0,49ε) |
Макс = 3.97ε (Средний = 0.713ε) |
Гамма относительно проста в тестировании: факториалы и полуцелочисленные факториалы могут быть рассчитаны точно другими способами и сопоставлены с гамма-функцией. Кроме того, некоторые тесты точности в известных сложных областях были рассчитаны с высокой точностью с использованием общей версии этой функции.
Функцияtgamma1pm1
протестирована против значений, вычисленных очень наивно с использованием формулыtgamma1+dz—1
с приближением lanczos, точным примерно до 100 десятичных цифр.
Общая версия функцииtgamma
реализована в приближении Стерлинга к lgamma для больших z:
После экспоненциации используется нисходящая рекурсия для малых значений z.
Для типов известной точности используется аппроксимацияLanczos, класс признаковboost::математика::lanczos::lanczos_traits
карты типа T с соответствующим приближением.
Для z в диапазоне -20< z< 1 затем используется рекурсия для перехода на z >1 через:
Для очень маленьких z это помогает сохранить идентичность:
Для z< -20 формула отражения:
используется. Особое внимание следует уделить оценкеz * sin(π * z)
: для уменьшения z перед умножением на π используется специальная процедура, обеспечивающая, чтобы результат находился в диапазоне [0, π/2]. Без этого в этом регионе происходит чрезмерное количество ошибок (что уже достаточно сложно, так как скорость изменения вблизи отрицательного полюса составляет).исключительновысоко.
Наконец, если аргумент представляет собой небольшое целое число, то используется поиск таблицы факториала.
Функцияtgamma1pm1
реализована с использованием рациональных приближений, разработанных JMв области-0,5<dz<2
. Это те же приближения (и внутренние процедуры), которые используются дляlgamma. Результатом приближения являетсяlogtgammadz+1]
, который может подаваться вexpm1для получения желаемого результата. За пределами диапазона-0,5<dz<2
тогда наивная формулаtgamma1pm1dz=tgamma+11
может использоваться непосредственно.
Статья Gamma раздела Math Toolkit 2.5.0 Gamma Functions может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Gamma Functions ::
реклама |