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

问题描述

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

Anywhere past 85000 terms I get a segmentation fault and python quits. How can I avoid this? Why is it crashing? Can't it just please use more memory or something?


解决方案

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

You appear to have found a bug in eval where it can't handle insanely long expressions:

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

不过,我还是明智地使用了非常长"这个短语.不要那样做,边走边计算.在这种情况下没有理由使用 eval.

I use the phrase "insanely long" advisedly though. Don't do it that way, calculate the pieces as you go. There is no reason to be using eval in this situation.

相关文章