Возможно, вы думаете, что хотите это сделать, но вы действительно не хотите этого делать. Новые Pythoners обычно думают, что им нужно округлять числа с плавающей запятой, потому что когда они оцениваются, они получают неожиданные результаты (например, 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)
Что вопрос? – Ber 2010-11-23 09:29:37
Разделить последнюю строку кода. – 2010-11-23 09:46:23
Я думаю, вы имеете в виду функцию `round()`, описанную в документах [здесь] (http://docs.python.org/library/functions.html?highlight=round#round). – martineau 2010-11-23 11:38:28