小编asp*_*e99的帖子

Python计算错误

我正在使用API​​ mpmath来计算以下总和

让我们考虑一下由下式定义的系列u0,u1,u2:

u0 = 3/2 = 1,5

u1 = 5/3 = 1,6666666…

un+1 = 2003 - 6002/un + 4000/un un-1
Run Code Online (Sandbox Code Playgroud)

系列在2上收敛,但由于四舍五入问题,它似乎在2000年汇合.

n   Calculated value    Rounded off exact value

2   1,800001            1,800000000
3   1,890000            1,888888889
4   3,116924            1,941176471
5   756,3870306         1,969696970
6   1996,761549         1,984615385
7   1999,996781         1,992248062
8   1999,999997         1,996108949
9   2000,000000         1,998050682
10  2000,000000         1,999024390

我的代码:

from mpmath import *
mp.dps = 50
u0=mpf(3/2.0)
u1=mpf(5/3.0)
u=[]
u.append(u0)
u.append(u1)
for i in range (2,11):
    un1=(2003-6002/u[i-1]+(mpf(4000)/mpf((u[i-1]*u[i-2]))))
    u.append(un1)
print u
Run Code Online (Sandbox Code Playgroud)

我的结果不好:

[mpf('1.5'), …
Run Code Online (Sandbox Code Playgroud)

python math floating-point fixed-point arbitrary-precision

8
推荐指数
1
解决办法
731
查看次数

以边界限制器为元素的子列表

我有一个像这样的列表的基本谓词:

sublist(List, Offset, Length, Sublist)


sublist(List, Offset, Length, Sublist):-
    length(Prefix, Offset),
    append(Prefix, Rest, List),
    length(Sublist, Length),
    append(Sublist, _, Rest).
Run Code Online (Sandbox Code Playgroud)

它从给定长度的初始列表中的第一个元素返回一个子列表.

6 ?- sublist([a,b,c,d,e,f,g,h,i,j,k], 3, 6, X).
X = [d, e, f, g, h, i].
Run Code Online (Sandbox Code Playgroud)

我想用一个下限和上限来转换这个谓词,它直接是原始列表的元素,就像这样

sublist([a,b,c,d,e,f,g,h,i,j,k], d, i, X).
X = [d, e, f, g, h, i].
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

predicate list prolog dcg

1
推荐指数
1
解决办法
96
查看次数