【发布时间】:2019-05-03 09:30:14
【问题描述】:
以下 Python 3.x 整数乘法平均需要 1.66 秒到 1.77 秒:
import time
start_time = time.time()
num = 0
for x in range(0, 10000000):
# num += 2 * (x * x)
num += 2 * x * x
print("--- %s seconds ---" % (time.time() - start_time))
如果我将2 * x * x 替换为2 *(x * x),则需要在2.04 和2.25 之间。怎么会?
另一方面,Java 中则相反:2 * (x * x) 在 Java 中更快。 Java测试链接:Why is 2 * (i * i) faster than 2 * i * i in Java?
每个版本的程序我运行了 10 次,结果如下。
2 * x * x | 2 * (x * x)
---------------------------------------
1.7717654705047607 | 2.0789272785186768
1.735931396484375 | 2.1166207790374756
1.7093875408172607 | 2.024367570877075
1.7004504203796387 | 2.047525405883789
1.6676218509674072 | 2.254328966140747
1.699510097503662 | 2.0949244499206543
1.6889283657073975 | 2.0841963291168213
1.7243537902832031 | 2.1290600299835205
1.712965488433838 | 2.1942825317382812
1.7622807025909424 | 2.1200053691864014
【问题讨论】:
-
小提示:使用
timeit模块获得更好的统计数据 -
为了更好的衡量标准,您不妨也输入
2 * pow(x,2)和2 * x**2。另外,请使用timeit重做您的计时,它比time.time()对于短流程更准确。 -
相关的近乎重复,虽然不是很清楚地说明:Times-two faster than bit-shift, for Python 3.x integers?
标签: python python-3.x performance benchmarking integer-arithmetic