def pi(times):
seq = []
counter = 0
for x in range(times):
counter += 2
seq.append("((%f**2)/(%f*%f))*"%(float(counter), float(counter-1), float(counter+1)))
seq.append("1.0")
seq = "".join(seq)
seq = eval(seq)
return seq*2
在85000个术语的任何地方,我都会遇到分段错误并退出python。我怎么能避免这个?为什么会崩溃?不能只是请使用更多内存或什么?
答案 0 :(得分:5)
您似乎在eval
中发现了一个无法处理疯狂长句的错误:
>>> eval("1.0*"*10000+"1.0")
1.0
>>> eval("1.0*"*100000+"1.0")
# segfault here
我尽管使用了“疯狂长”的短语。不要这样做,随你计算件数。在这种情况下没有理由使用eval
。
答案 1 :(得分:2)
为什么要使用eval()
?
def pi(times):
val = 1
counter = 0
for x in range(times) :
counter += 2
val *= float(counter)**2/(counter**2 - 1)
return val * 2
完全相同的事情。