![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Error Function InversesBoost , Math Toolkit 2.5.0 , Error Functions
|
Microsoft Visual C++ версия 12.0 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Компилятор Sun версии 0x5130 |
|
---|---|---|---|---|
Inverse Erf Function |
Max = 1.09ε (Mean = 0.502ε) |
Max = 0ε (Mean = 0ε) |
Max = 0.996ε (среднее значение = 0.389ε;) |
Max = 0.996ε (Mean = 0.385ε) |
Table 6.31. Error rates for erfc_inv
Microsoft Visual C++ версия 12.0 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Компилятор Sun версии 0x5130 |
|
---|---|---|---|---|
Inverse Erfc Function |
Макс = 1ε (Средний = 0,491ε); |
Max = 0ε (Mean = 0ε) |
Max = 0.996ε (Mean = 0.397ε) |
Max = 0.996ε (Mean = 0.397ε) |
Inverse Erfc Function: extreme values |
Max = 1.62ε (Mean = 0.383ε) |
Max = 1.62ε (Mean = 0.385ε) |
Существует два набора тестов:
Эти функции используют рациональное приближение , разработанное JM для вычисления начального приближения к результату, который является точным до ~10-19, то только если это имеет недостаточную точность по сравнению с эпсилоном для T, мы очищаем результат с помощью итерации Холли.
Построение рациональных приближений к функциям erf/erfc на самом деле удивительно сложно, особенно при высокой точности. По этой причине не было предпринято попыток достичь точности 10-34 , пригодной для использования с 128-битными реалами.
В следующем обсуждении p является значением, переданным erf_inv, а q является значением, переданным erfc_inv, так что p = 1 - q и q = 1 - p и в обоих случаях мы хотим решить для одного и того же результата x.
Для p <0.5 обратная эрф-функция достаточно гладкая и приближенная:
x = p(p + 10)(Y + R(p))
Дает хороший результат для постоянных Y и R(p), оптимизированных для низкой абсолютной ошибки по сравнению с |Y |.
Для q < 0,5 вещи становятся сложнее, через интервал 0,5 > q > 0,25 Хорошо работает следующее приближение:
x = sqrt(-2log(q)) / (Y + R(q))
В то время как для q < 0,25, пусть
z = sqrt(-log(q))
Затем результат дается:
x = z(Y + R(z - B))
Как и раньше, Y является константой, а рациональная функция R оптимизирована для низкой абсолютной ошибки по сравнению с |Y |. B также является константой: это наименьшее значение z, для которого каждое приближение является действительным. Существует несколько приближений этой формы, каждое из которых достигает немного дальше в хвост функции erfc (при точности long double
расширенный диапазон экспонент по сравнению с double
означает, что хвост действительно идет очень долгий путь).
Статья Error Function Inverses раздела Math Toolkit 2.5.0 Error Functions может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Error Functions ::
реклама |