一旦小数点后的数字停止变化,就停止求和循环

时间:2021-05-21 20:31:45

标签: python

我有一个计算近似值的循环。循环应在小数点停止更改后 10 位后立即停止。但我就是不能让它停下来。 Here is the math function and the error I get

这是我试过的:

summe = 0
i = 0
l = []

while True:
    i = i + 1
    summe = summe + 1/(i**3)
    l.append(format(summe, '.20f'))
    
    if l[i][:14] == l[i+1][:14]:
        break

以下是列表中第一个元素的示例:

['1.00000000000000000000',
 '1.12500000000000000000',
 '1.16203703703703697947',
 '1.17766203703703697947',
 '1.18566203703703698658',
 '1.19029166666666652574']

所以它应该一直持续到小数点后的前10位数字停止变化。还尝试在 if 语句中使用 i-1 而不是 i+1 。那么它不应该将元素和之前的元素相互比较吗?喜欢l[3] == l[2]

编辑:我刚刚看到它应该是 [:12] 而不是 [:14]。但同样的问题仍然存在

2 个答案:

答案 0 :(得分:0)

if 语句要求列表至少包含两个元素。在第一次迭代期间,它只会包含一个。

答案 1 :(得分:0)

当你可以用数学方法检查时,使用字符串似乎是一种耻辱:

summe = 0
i = 1
add = 1.0

while add > 1e-11:
    summe += add
    i += 1
    add = 1/(i**3)
    print(summe)