Может быть, вы думаете, что хотите это сделать, но на самом деле вы не хотите этого делать. Новые Python обычно думают, что им нужно округлить числа с плавающей запятой, потому что при оценке они получают неожиданные результаты (например, 1,0 / 10 = 0,100000000000001). Вместо того, чтобы делать глупые подстановки в вашем выражении, я просто создал переменную для round(49/200,n)
и немного очистил формат. Также exp(49/200)
не нужно оценивать 13 раз, просто сделайте это один раз и обратитесь к вычисленному значению.
zz = round(49/200,n)
e_zz = exp(zz)
ans = (e_zz +
e_zz * (x-zz) +
1/2 * e_zz * (x-zz)**2 +
1/6 * e_zz * (x-zz)**3 +
1/24 * e_zz * (x-zz)**4 +
1/120 * e_zz * (x-zz)**5 +
1/720 * e_zz * (x-zz)**6 +
1/5040 * e_zz * (x-zz)**7 +
1/40320 * e_zz * (x-zz)**8 +
1/362880 * e_zz * (x-zz)**9 +
1/3628800 * e_zz * (x-zz)**10 +
1/39916800 * e_zz * (x-zz)**11)
Повышение e до округленного числа почти никогда не подходит. Аналогично для повышения округленного числа до 11-й степени. (Обратите внимание, что в Python оператор возведения в степень равен **
, а не ^
.)
Отредактированный :
Если бы С.Лотт не предложил алгебраическое упрощение, я бы оставил это как есть. Но * e_zz
может быть выделен из каждого термина, давая более простое (и, вероятно, более быстрое):
zz = round(49/200,n)
e_zz = exp(zz)
ans = e_zz * (1 +
(x-zz) +
1/2 * (x-zz)**2 +
1/6 * (x-zz)**3 +
1/24 * (x-zz)**4 +
1/120 * (x-zz)**5 +
1/720 * (x-zz)**6 +
1/5040 * (x-zz)**7 +
1/40320 * (x-zz)**8 +
1/362880 * (x-zz)**9 +
1/3628800 * (x-zz)**10 +
1/39916800 * (x-zz)**11)