jayrandom: (Default)
jayrandom ([personal profile] jayrandom) wrote2005-03-15 05:36 pm

арк-факториал?

Не хватает функции, вычисляющей аргумент факториала по его значению.
Ведь не перебором же это делать - даже если не линейным, а бисектирующим.

[identity profile] azgar.livejournal.com 2005-03-15 11:11 pm (UTC)(link)
Факториал же, на сколько я помню, как ряд считается.
Гамма функция и всё такое :)
Может её обратить можно?

[identity profile] jayrandom.livejournal.com 2005-03-15 11:51 pm (UTC)(link)
Хорошо бы ещё, чтобы не приближённо. Так чтоб !120 = 5.

Блин. И ж ведь символа специального тоже нет... - я хотел разыскать перевёрнутое испанское восклицание, но заблудся в Юникоде :)

[identity profile] azgar.livejournal.com 2005-03-16 12:02 am (UTC)(link)
Ты будешь смеяться, но ¡ живёт в самом начале.
Он вообще был в IBMовском "расширеном ASCII", то есть в превых 256 символах :)

А факториал, на сколько я заню, можно считать или точно, или быстро.

Обратный факториал, я думаю, точно должен считаться для целых чисел через оценку с последующей проверкой.

[identity profile] jayrandom.livejournal.com 2005-03-18 04:21 am (UTC)(link)
> А факториал, на сколько я заню, можно считать или точно, или быстро.

"дёшево, быстро, качественно - зачеркните любое слово" :)

ну что Вы

[identity profile] not-knot.livejournal.com 2005-03-20 10:45 am (UTC)(link)
ln x/ln ln x с точностью до константы

Re: ну что Вы

[identity profile] jayrandom.livejournal.com 2005-03-20 12:44 pm (UTC)(link)
Да-да, точность до константы - это замечательная идея :) Быстро и бесполезно.

В своё время меня шокировало, что существует целая ветка математики, занимающаяся оценками "с точностью до мультипликативной константы" - Колмогоровская сложность. И только несколько лет спустя до меня стало доходить, что ведь и из таких в принципе невычислимых эфемерностей можно какую-то пользу извлечь.

[identity profile] not-knot.livejournal.com 2005-03-20 12:57 pm (UTC)(link)
N = n! = sqrt(n) C*(n/e)^(n+-1/12n), какая-то там оценка есть
ln (n!/C) = n (ln n - 1) + ln n/2
ln ln (n!/C) = ln n + ln (ln n - 1)
ln / (ln ln - ln ln ln - 1) = n + можно оценить точность, она будет расти с увеличением n

Напомню, что у Вас аргумент по определению целый, так что как только получите точность 0.4 - всё, работает.

[identity profile] not-knot.livejournal.com 2005-03-20 12:58 pm (UTC)(link)
А константа = 1, просто мне в первом посту было лень вспоминать формулы

[identity profile] jayrandom.livejournal.com 2005-03-20 01:15 pm (UTC)(link)
Может быть поближе к бесконечности :).

Сейчас проверил - если ещё 10 из результата вычесть, то уже третий десяток нормально округляется. Но потом плавно уплывает дальше :)

3, 3!=6, antifact=4.63539274206497
4, 4!=24, antifact=277.072577780632
5, 5!=120, antifact=30.7523106350467
6, 6!=720, antifact=16.2575861110491
7, 7!=5040, antifact=12.3872101283211
8, 8!=40320, antifact=11.1213052883192
9, 9!=362880, antifact=10.8615636326171
10, 10!=3628800, antifact=11.0896635881942
11, 11!=39916800, antifact=11.589241766548
12, 12!=479001600, antifact=12.2545632591424
13, 13!=6227020800, antifact=13.0280353761983
14, 14!=87178291200, antifact=13.8756946808858
15, 15!=1307674368000, antifact=14.7762585374334
16, 16!=20922789888000, antifact=15.7157357941107
17, 17!=355687428096000, antifact=16.6845649963539
18, 18!=6.402373705728e+15, antifact=17.6759993699014
19, 19!=1.21645100408832e+17, antifact=18.6851486691666
20, 20!=2.43290200817664e+18, antifact=19.7083864414636
21, 21!=5.10909421717094e+19, antifact=20.7429700832666
22, 22!=1.12400072777761e+21, antifact=21.7867897391281
23, 23!=2.5852016738885e+22, antifact=22.8381978843081
24, 24!=6.20448401733239e+23, antifact=23.8958909389795
25, 25!=1.5511210043331e+25, antifact=24.9588253153684
26, 26!=4.03291461126606e+26, antifact=26.0261567800618
27, 27!=1.08888694504184e+28, antifact=27.097195930043
28, 28!=3.04888344611714e+29, antifact=28.1713750121476
29, 29!=8.8417619937397e+30, antifact=29.2482228616815
30, 30!=2.65252859812191e+32, antifact=30.3273457407684
...
38, 38!=5.23022617466601e+44, antifact=39.0112585087701
39, 39!=2.03978820811974e+46, antifact=40.1005565627439
40, 40!=8.15915283247898e+47, antifact=41.1903237295833
...
48, 48!=1.24139155925361e+61, antifact=49.9179607835668
49, 49!=6.08281864034268e+62, antifact=51.0094423593456
50, 50!=3.04140932017134e+64, antifact=52.1009364112403

ну и так далее. Ошибка маленькая, но что-то в обозримом настоящем не очень останавливается.

Обратный факториал

[identity profile] infoliokrat.livejournal.com 2010-07-03 09:13 am (UTC)(link)
Ох и досталось мне от молодых, http://www.gamedev.ru/flame/forum/?id=85919&page=20
даже за то, что в калькуляторе с инфолиофакториалом (для любых положительных, но не = Г(х) использовал для обратного факториала ?, а не перевернутый восклицательный знак!
Мнемоника простая- знак ? съедает знак ! (Правда, из ВИКИ это почему-то удалили).
120?= (120/1/2/3/4)!?=5 И о скорости вычислений там рассуждали. Вопрос, до каких величин это актуально. 256! и, соответственно 256!? устроит?

Re: Обратный факториал

[identity profile] jayrandom.livejournal.com 2010-07-03 01:06 pm (UTC)(link)
Дискуссию не осилил.

Но мне вполне понятно, почему из Википедии удаляют такие вещи. Идея может быть сколь угодно правильной, интуитивно удобной, и т.д., но в Википедии (по крайней мере, в её англоязычном варианте) есть правило: в Википедию помещаются только статьи на устоявшиеся факты, а не на т.н. "original research". Поэтому не стоит обижаться :)

[identity profile] infoliokrat.livejournal.com 2010-07-03 09:23 am (UTC)(link)
Извиняюсь. Вот на http://dic.academic.ru/dic.nsf/ruwiki/8486 (Словари и энциклопедии на Академике) осталось еще
"Обратный факториал — (Перенаправлено с Обратные Задачи на факториал) Текущая версия (не проверялась) Связать? Обратный факториал числа N ! (обозначение: !?) определяется как число, факториал которого ! и есть исходное число. Название обратный… (Википедия)"