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
14495
А разве относительная погрешность, которая только и важна, растёт?

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


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


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

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

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


13/08/08
14495
Это, конечно, может быть важно при решении каких-то целочисленных задач, там ошибка в 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
4397
Москва
Лучше воспользуйтесь более точной формулой:
$$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
8562
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
8562
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