3
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 退出。我怎样才能避免这种情况?为什么会崩溃?难道不能只是使用更多的内存或其他东西吗?

4

2 回答 2

5

您似乎发现了一个错误eval,它无法处理超长的表达式:

>>> eval("1.0*"*10000+"1.0")
1.0
>>> eval("1.0*"*100000+"1.0")
# segfault here

不过,我建议使用“非常长”这个短语。不要那样做,边走边计算。没有理由eval在这种情况下使用。

于 2011-03-03T07:02:45.553 回答
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

做同样的事情。

于 2011-03-03T07:06:52.887 回答