为什么使用 Python 解释器计算小斐波那契数列比 PyPy 更快

2024-03-10

我正在使用 PyPy 进行一些斐波那契计算,首先我从较大的数字开始,PyPy 更快一点,但是对于较小的数字,它提供几乎相同的性能,并且某些情况下普通解释器比 pypy 快得多,有什么具体原因吗?

from time import time

def fibonacci(n):
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a + b
    return a
start = time()
result = fibonacci(5000)
end = time()
print(end-start) 

数量很少,比如 5000Python实际上是faster than PyPy;

Python: 0.0006256103515625
PyPy: 0.0016071796417236328

当涉及到更大一点的数字(例如 1.000.000)时,PyPyPython

PyPy: 8.567905902862549
Python: 9.79963207244873

但当涉及到不同的计算时,例如:

def sum_in_range(a,b):
    c = 0
    for i in range(1, a):
       for j in range(1, b):
          c += i+j
    return c

start = time()
result = sum_in_range(100000,100000)
end = time()
print(end-start)

PyPy is 60Python

PyPy: 0.1999509334564209
Python: 12.051937103271484

除了其他答案之外:如果您的斐波那契示例是用 C、C#、带或不带 JIT 的 Python 或其他任何地方编写的,那么它将以大致相同的速度运行。这是因为斐波那契示例产生的数字呈指数级增长。经过几次迭代后,它把所有时间都花在库内处理更大的整数,而在库外几乎没有时间处理。

当然,我们可以讨论为什么它在这种情况下更快或更慢的细节,但这是比较小的常量开销和所使用的长整数库的细节;和语言关系不大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 Python 解释器计算小斐波那契数列比 PyPy 更快 的相关文章

随机推荐