Форум сайта python.su
При любом икс выдает единицу
import math def f(x): s1, s2 = 0, 1 n = 0 s = 0 eps = 0.0001 while abs(s2 - s1) >= eps: s += s2 s1 = s2 s2 = ((-1)**n)*x**(2*n)/math.factorial(2*n) n += 1 return s
Отредактировано Fanago (Янв. 24, 2017 14:38:45)
Офлайн
Все эти задачи делаются без факториалов, потому что факториал сильно замедляет вычисления. Читай про рекуррентные соотношения.
Офлайн
py.user.nextА если факториал заранее посчитан для нужного диапазона?
факториал сильно замедляет вычисления.
Офлайн
FishHookЭтот ряд - бесконечный, но даже если ты посчитал что-то там, оно всё равно будет медленным, потому что факториальные числа много весят (больше, чем нужно для рекуррентных соотношений). Для факториальных чисел нужна длинная арифметика, а для длинной арифметики нужны свои операции со всей длинной хренью. А для рекуррентных соотношений нужно короткое число и обычные (быстрые) операции с коротким числом.
А если факториал заранее посчитан для нужного диапазона?
Отредактировано py.user.next (Янв. 24, 2017 15:06:20)
Офлайн
py.user.nextЕсли я заранее знаю, что аргумент факториала по заданию не превысит десяти, то демостратор будет неправ.
Короче, вот эта хрень, которую он предложил - ну, тупо в лоб факториал вычислять на каждом шаге - это обычно в универах не принимают за правильный ответ
Офлайн
FanagoТак Вы заведомо делаете выражение:
При любом икс выдает единицу
s2 = ((-1)**n)*x**(2*n)/math.factorial(2*n)
Отредактировано Romissevd (Янв. 24, 2017 19:01:27)
Офлайн
FishHookЭто нужно просто взять и конкретно замерить: рекуррентное отношение vs. кешированные факториалы.
Если я заранее знаю, что аргумент факториала по заданию не превысит десяти, то демостратор будет неправ.
1> lists:any(fun(X) -> X > 3 end, [1,2,3,4,5]).
true
2> lists:any(fun(X) -> X > 3 end, [1,2,3]).
false
3>
Отредактировано py.user.next (Янв. 25, 2017 03:45:22)
Офлайн
static const unsigned long SmallFactorials[] = {
1, 1, 2, 6, 24, 120, 720, 5040, 40320,
362880, 3628800, 39916800, 479001600,
#if SIZEOF_LONG >= 8
6227020800, 87178291200, 1307674368000,
20922789888000, 355687428096000, 6402373705728000,
121645100408832000, 2432902008176640000
#endif
};
Офлайн
FishHookА где здесь 100! ? Хотя 100 это ещё маленькое число n при n -> +inf
Где здесь длинная арифметика?
>>> math.factorial(100) 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 >>>
>>> 12345 / math.factorial(100) 1.322779450690889e-154 >>> 12345 / math.factorial(1000) 0.0 >>>
Отредактировано py.user.next (Янв. 25, 2017 10:11:53)
Офлайн
FishHook
Если я заранее знаю, что аргумент факториала по заданию не превысит десяти
py.user.next
А где здесь 100!
Офлайн