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
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
py.user.nextА если факториал заранее посчитан для нужного диапазона?
факториал сильно замедляет вычисления.
FishHookЭтот ряд - бесконечный, но даже если ты посчитал что-то там, оно всё равно будет медленным, потому что факториальные числа много весят (больше, чем нужно для рекуррентных соотношений). Для факториальных чисел нужна длинная арифметика, а для длинной арифметики нужны свои операции со всей длинной хренью. А для рекуррентных соотношений нужно короткое число и обычные (быстрые) операции с коротким числом.
А если факториал заранее посчитан для нужного диапазона?
py.user.nextЕсли я заранее знаю, что аргумент факториала по заданию не превысит десяти, то демостратор будет неправ.
Короче, вот эта хрень, которую он предложил - ну, тупо в лоб факториал вычислять на каждом шаге - это обычно в универах не принимают за правильный ответ
FanagoТак Вы заведомо делаете выражение:
При любом икс выдает единицу
s2 = ((-1)**n)*x**(2*n)/math.factorial(2*n)
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>
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 >>>
FishHook
Если я заранее знаю, что аргумент факториала по заданию не превысит десяти
py.user.next
А где здесь 100!