想象一下
exp(49/200)+(x-49/200)
我想传递函数“roundn”的参数,无论是不是加法或减法的操作
所以我的表情变成了
roundn(exp(roundn(49/200, n)), n) + (x - roundn(49/200, n)
我想要操纵的表达是这样的:
exp(49/200)+exp(49/200)*(x-49/200)+1/2*exp(49/200)*(x-49/200)^2+1/6*exp(49/200)*(x-49/200)^3+1/24*exp(49/200)*(x-49/200)^4+1/120*exp(49/200)*(x-49/200)^5+1/720*exp(49/200)*(x-49/200)^6+1/5040*exp(49/200)*(x-49/200)^7+1/40320*exp(49/200)*(x-49/200)^8+1/362880*exp(49/200)*(x-49/200)^9+1/3628800*exp(49/200)*(x-49/200)^10+1/39916800*exp(49/200)*(x-49/200)^11
解决方法:
也许你认为你想要这样做,但你真的不想这样做.新的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中,取幂运算符是**,而不是^.)
编辑:
如果S.Lott没有建议代数简化,我会原样保留原样.但是* 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)