арк-факториал?
Mar. 15th, 2005 05:36 pmНе хватает функции, вычисляющей аргумент факториала по его значению.
Ведь не перебором же это делать - даже если не линейным, а бисектирующим.
Ведь не перебором же это делать - даже если не линейным, а бисектирующим.
no subject
Date: 2005-03-20 12:57 pm (UTC)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 - всё, работает.
no subject
Date: 2005-03-20 12:58 pm (UTC)no subject
Date: 2005-03-20 01:15 pm (UTC)Сейчас проверил - если ещё 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
ну и так далее. Ошибка маленькая, но что-то в обозримом настоящем не очень останавливается.