pi计算中的分段错误(python)

时间:2011-03-03 06:27:33

标签: python for-loop segmentation-fault series pi

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。我怎么能避免这个?为什么会崩溃?不能只是使用更多内存或什么?

2 个答案:

答案 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

完全相同的事情。