我想了很久了。就像题目说的,哪个更快,是实际函数还是简单地取1 / 2次幂?
更新
这不是一个过早优化的问题。这只是一个底层代码如何实际工作的问题。Python代码的工作原理是什么?
我给Guido van Rossum发了一封邮件,因为我真的很想知道这些方法的区别。
我的电子邮件:
在Python中至少有3种方法来求平方根:math。返回值,
'**'运算符和pow(x,.5)。我只是好奇它们之间的区别
每一个的实现。说到效率
是更好吗?
他的回答:
Pow和**是等价的;数学。根号方根不适用于复数,
并链接到C的sqrt()函数。至于哪一个是
快点,我不知道……
在python 2.6中,(float).__pow__()函数使用C pow()函数,math.sqrt()函数使用C sqrt()函数。
在glibc编译器中,pow(x,y)的实现相当复杂,并且针对各种例外情况进行了很好的优化。例如,调用C pow(x,0.5)只调用sqrt()函数。
**或数学使用速度的差异。sqrt是由围绕C函数的包装器引起的,速度很大程度上取决于系统上使用的优化标志/C编译器。
编辑:
这是克劳狄算法在我机器上的结果。我得到了不同的结果:
zoltan@host:~$ python2.4 p.py
Took 0.173994 seconds
Took 0.158991 seconds
zoltan@host:~$ python2.5 p.py
Took 0.182321 seconds
Took 0.155394 seconds
zoltan@host:~$ python2.6 p.py
Took 0.166766 seconds
Took 0.097018 seconds