Для вычисления специальных функций численно (в том числе в комплексной области) обычно используют специальные быстрые алгоритмы. Подробнее посмотрите, например книгу
"Люк Ю. Специальные математические функции и их аппроксимации."
Общая идея (неплохо работающая для функции
):
1. Для больших по модулю
использовать асимптотические разложения.
2. Для небольших по модулю
использовать ряды Тейлора и (то, что указал
Sonic86) или некоторые другие разложения (например, апроксиманты Паде).
3. В эти формулы вводятся небольшие коррекции для лушей склейки "склейки" этих формул в области промежуточных
.
4. Бывает удобно предварительное преобразование переменной.
Явные формулы для
) (вплоть до точностей
) можно посмотреть в книге Люка, а при меньших запросах к точности, например в книге Абрамовиц, Стиган "Справочник по специальным функциям" (и во многих других, посвященных численным расчетам). (Обычно в книгах даются формулы для
- функции ошибок, которая тривиально связана с
)
Как на самом деле - не знаю.
Какой именно алгоритм вычисления
используют в Excel программисты Microsoft (и меняется ли он от версии к версии) я тоже не знаю, хотя предполагаю - стандартный (из книги Люка). А вот, что точно можно сказать - алгоритм, описанный здесь:
В принципе он может разбивать
, первый интеграл ясно чему равен, а второй интеграл - через ряд Маклорена (он все равно быстро сходится).
- это с точки зрения численных расчетов - плохой алгоритм.
Sonic86 предлагает формулу
Этот ряд действительно сходится для всех
, но хорош он для численного использования только при небольших
. Если его попытаться использовать для вычисления, например, хотя бы величины
, то возникнут практически непреодолимые численные трудности. Дело в том, что поначалу члены ряда быстро растут по модулю и лишь после этого начинают убывать, стремясь в итоге к нулю. Например, 200-й член ряда для
превышает
и лишь 536-й член становится
. В такой ситуации необходимо будет проводить вычисления со 100 значащими цифрами, чтобы после сокращения колоссальных положительных и отрицательных слагаемых получить правильный ответ (хотя бы из таблиц, хорошо известно, что с очень высокой точностью
).
Похожие проблемы есть не только для специальных функций, но и для элементарных - например, если бы мы попытались вычислить
по его тейлоровскому ряду при достаточно больших
. На практике в этом случае нормальный численный алгоритм сначала, используя периодичность
"сбросит"
в интервал
(а еще лучше - используя формулы приведения - в интервал
), и уже только потом применит Тейлоровский ряд (или еще что-то подобное). Так, что без использования "аналитики" во многих случаях не удастся создать эффективный численный алгоритм. На заре компьютерной эры эти вопросы активно разрабатывались и было предложено немало достаточно эффективных численных алгоритмов вычисления элементарных и специальных функций, которые теперь реализованы в инженерных калькуляторах, стандартных подпрограммах языков программирования и математических программах. По этой причине, кстати, к результатам численных расчетов значений спецфункций в математических программах (даже таких "монстров" таких как Mathematica или Maple), особенно в комплексной области, следует относится с осторожностью - всегда не лишне их проверять на "здравый смысл": нет 100% гарантии, что используемый данной программой численный алгоритм правильно обрабатывает все ситуации.