Pet*_*one 3 python string substitution formal-languages formal-semantics
想象一下
exp(49/200)+(x-49/200)
Run Code Online (Sandbox Code Playgroud)
我想作为函数"roundn"的参数传递任何不是加法或减法的操作所以我的表达式变成了
roundn(exp(roundn(49/200, n)), n) + (x - roundn(49/200, n)
Run Code Online (Sandbox Code Playgroud)
我想要操纵的表达是这样的:
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
Run Code Online (Sandbox Code Playgroud)
也许你认为你想要这样做,但你真的不想这样做.新的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)
Run Code Online (Sandbox Code Playgroud)
将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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |