【发布时间】:2015-02-17 14:01:36
【问题描述】:
在讨论问题Exponentials in python x.**y vs math.pow(x, y)时,
Alfe stated 没有充分的理由在 python 中使用 math.pow 而不是内置的 ** 运算符。
timeit 表明 math.pow 在所有情况下都比 ** 慢。无论如何, math.pow() 有什么用?有没有人知道它在哪里可以有任何优势?
我们试图用一些timeit 的论点来说服对方,到目前为止他是赢家;-) -- 至少以下timeit 结果似乎证实了math.pow is slower than ** in all cases .
import timeit
print timeit.timeit("math.pow(2, 100)",setup='import math')
print timeit.timeit("2.0 ** 100.0")
print timeit.timeit("2 ** 100")
print timeit.timeit("2.01 ** 100.01")
输出:
0.329639911652
0.0361258983612
0.0364260673523
0.0363788604736
对我们观察到的差异[1]有简单的解释吗?
[1]math.pow和**的性能相差一个数量级。
编辑:
- 文字参数而不是标题中的变量
- 明确指出差异大小的脚注
【问题讨论】:
-
这似乎是您链接到的问题的欺骗。
-
我相信您给出的链接中的答案之一给出了解释。其中一个分解每个案例,显示调用是如何呈现的。
-
@lurker 不。这不是重复的,请查看因子 9 而不是 1.2。
-
@user694733 我确定这不是一个重复,我在自己添加答案之前阅读了问题和答案stackoverflow.com/questions/20969773/…
-
因为你有常量,我怀疑功率是在编译时计算的。检查拆卸。如果是这种情况,那么您需要像
print timeit.timeit("2.0 ** i", setup='i=100.0')这样的东西来进行公平比较。
标签: python performance pow