2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 10:50 
Аватара пользователя


02/03/11
9
Доброе время суток, товарищи математики.

Решил апгрейдить свой калькулятор (oncalc.net) добавить возможность вычисления факториала вещественных чисел. Вычислять решил при помощи формулы Стирлинга. Написал функционал, начал тестить. Проверял я следующим образом, подсчитывал факториалы целых чисел через формулу стирлинга и простым методом (1*2*...*n) и сравнивал результаты. И что у меня получилось (результаты округляю):

До факториала 17 идет ровно, а потом расхождение начинает рости:
Код:
15!
(1*2*...*15) = Ф.Стирлинга = 1307674368000

16!
(1*2*...*16) = Ф.Стирлинга = 20922789888000

17!
(1*2*...*17): 355687428096000
Ф.Стирлинга: 355687428096045

18!
(1*2*...*18): 6402373705728000
Ф.Стирлинга: 6402373705727531

.. .. ..

25!
(1*2*...*25): 15511210043330985984000000
Ф.Стирлинга: 15511210043334063846443075

А для больших результатов, больше 1000! там вообще все "страшно" :)

Формула Стирлинга реально такую погрешность дает? Есть ли более точный алгоритм подсчета факториала с вещественным аргументом?

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 11:15 
Заслуженный участник
Аватара пользователя


13/08/08
14496
А разве относительная погрешность, которая только и важна, растёт?

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 11:26 
Аватара пользователя


02/03/11
9
gris в сообщении #418920 писал(а):
А разве относительная погрешность, которая только и важна, растёт?


эм.. не понял, почему тут только важна относительная погрешность? Абсолютная погрешность растет и это плохо. Когда человек захочет подсчитать факториал, а ему выдаст результат гораздо меньше, чем должно быть - это разве не важно?

Когда вы считаете, например, 5! и вам возвращает результат 110 - это важно и пофиг какая это погрешность, относительная или абсолютная. Главное погрешность есть и это плохо :)

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 11:33 
Заслуженный участник
Аватара пользователя


13/08/08
14496
Это, конечно, может быть важно при решении каких-то целочисленных задач, там ошибка в 1 может быть критичной, но формула Стирлинга, как и большинство других приближённых формул, обеспечивает лишь определённую относительную погрешность.

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 11:43 
Аватара пользователя


02/03/11
9
gris в сообщении #418926 писал(а):
Это, конечно, может быть важно при решении каких-то целочисленных задач, там ошибка в 1 может быть критичной, но формула Стирлинга, как и большинство других приближённых формул, обеспечивает лишь определённую относительную погрешность.


То есть через формулу стирлинга факториал целых чисел считается с погрешностью, а факториал вещественных чисел считается с несущественной погрешностью? Я сравнил с результатом в винодовом калькуляторе, там расхождения:
Код:
19.65! = 847813787623647996,02308585917195 (В виндовом)
19.65! = 847813787623740168,52222585840589 (В моем)


Есть ли более точные алгоритмы подсчета факториала вещественного числа?

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 11:53 


20/12/09
1527
mcfly в сообщении #418929 писал(а):
факториал вещественных чисел

Гамма-функция Эйлера?

mcfly в сообщении #418929 писал(а):
Есть ли более точные алгоритмы подсчтета факториала вещественного числа?

Все нормальные люди просто перемножают числа. Это очень просто.
Из-за быстрого роста величины факториала эта операция лишена смысла для больших чисел .

Никто не использует формулу Стирлинга для вычисления факториала.
Формула Стирлинга полезна в анализе - там, где можно заменить выражение факториала на более удобное.

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:00 
Аватара пользователя


02/03/11
9
Ales в сообщении #418934 писал(а):
Все нормальные люди просто перемножают числа. Это очень просто.

А что "все нормальные люди" используют для факториала не целого числа? Перемножение, как для целых чисел?

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:06 
Заслуженный участник


09/02/06
4401
Москва
Лучше воспользуйтесь более точной формулой:
$$n!=\sqrt{2\pi n}(\frac ne)^nexp[\sum_{k=1}^m\frac{B_{2k}}{2k(2k-1)n^{2k-1}}+\theta_{m,n}\frac{B_{2m+2}}{(2m+2)(2m+1)n^{2m+1}}].$$
Здесь $|\theta_{m,n}|<1$ и наиболее точная формула получается когда $m=[\pi n+\frac 12]$ (целая часть). Если при вычислении (без $\theta$ и $m=[\pi n+0.5]$) взять ближайщее целое, то формула даст точное значение для $n$ примерно до 1500 (когда то вычислял, точное значение не помню где то 1462).

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:16 


20/12/09
1527
mcfly в сообщении #418936 писал(а):
А что "все нормальные люди" используют для факториала не целого числа? Перемножение, как для целых чисел?

Понятие факториала применяется к натуральным числам.
Что Вы имеете в виду, когда пишите "факториал не целого числа"?

-- Ср мар 02, 2011 12:25:17 --

Формула Стирлинга имеет относительную погрешность порядка $\frac 1 n$,
значит абсолютная погрешность будет порядка $(n-1)!$.

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:28 
Аватара пользователя


02/03/11
9
Руст в сообщении #418939 писал(а):
Лучше воспользуйтесь более точной формулой:
$$n!=\sqrt{2\pi n}(\frac ne)^nexp[\sum_{k=1}^m\frac{B_{2k}}{2k(2k-1)n^{2k-1}}+\theta_{m,n}\frac{B_{2m+2}}{(2m+2)(2m+1)n^{2m+1}}].$$
Здесь $|\theta_{m,n}|<1$ и наиболее точная формула получается когда $m=[\pi n+\frac 12]$ (целая часть). Если при вычислении (без $\theta$ и $m=[\pi n+0.5]$) взять ближайщее целое, то формула даст точное значение для $n$ примерно до 1500 (когда то вычислял, точное значение не помню где то 1462).


Спасибо за конкретный ответ без "воды"! :)

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:31 


20/12/09
1527
Но судя по проделанному автором темы эксперименту, для относительно малых $n$ формула Стирлинга более точна.

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:56 
Заслуженный участник


08/04/08
8564
mcfly
Имейте ввиду, что приведенная формула (кстати, это формула суммирования Эйлера-Маклорена, Фихтенгольц, 3-й том) верна только асимптотически, т.е. абсолютная погрешность будет стремиться к бесконечности при $n \to + \infty$

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:57 
Аватара пользователя


02/03/11
9
Ales в сообщении #418948 писал(а):
Но судя по проделанному автором темы эксперименту, для относительно малых $n$ формула Стирлинга более точна.


Да этот подход удовлетворителен для чисел типа Int. Но мой калькулятор считает даже 25000!, а для больших чисел результат, подсчитанный при помощи формулы Стирлинга, будет неверный. Вот и решил спросить у знающих людей, самый точный метод подсчета $n!$, где $n$-вещественное число.

Верно ли такое:
Если $n! = n(n-1)!$, то мы, например, $5.54!$ сможем разложить как:
Код:
5.54! = 5.54*4.54*3.54*2.54*1.54*0.54!


Где $0.54!$ вычислить по формуле Стирлинга, так как оно малое число, то оно правильно подсчитается.

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 12:59 
Заслуженный участник


08/04/08
8564
mcfly писал(а):
Да этот подход удовлетворителен для чисел типа Int. Но мой калькулятор считает даже $25000!$, а для больших чисел результат, подсчитанный при помощи формулы Стирлинга, будет неверный. Вот и решил спросить у знающих людей, самый точный метод подсчета $n!$, где $n$-вещественное число.

Самый точный - это все-таки по определению.
mcfly писал(а):
Верно ли такое:
Если $n! = n(n-1)!$, то мы, например, $5.54!$ сможем разложить как:
Код:
5.54! = 5.54*4.54*3.54*2.54*1.54*0.54!


Где $0.54!$ вычислить по формуле Стирлинга, так как оно малое число, то оно правильно подсчитается.

Да, только для нецелых чисел факториал обозначается функцией $\Gamma$. О ней Вы также можете прочесть в Фихтенгольце.

 Профиль  
                  
 
 Re: Точность подсчета факториала через формулу Стирлинга
Сообщение02.03.2011, 13:04 
Аватара пользователя


02/03/11
9
Sonic86 в сообщении #418958 писал(а):
Да, только для нецелых чисел факториал обозначается функцией $\Gamma$. О ней Вы также можете прочесть в Фихтенгольце.

Это же Гамма-функция, а она отличается от факториала: $n!=\Gamma (n+1), n! \neq \Gamma (n)$

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Утундрий


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group