我有一个计算近似值的循环。循环应在小数点停止更改后 10 位后立即停止。但我就是不能让它停下来。
这是我试过的:
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]。但同样的问题仍然存在
答案 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)