python中pow函数的用法,pythonpow函数用法
最简单方法与pow方法的比较
在python中,求两个A的B次方的常用方法有:pow(a,B),a**b * B,那么,这两者有区别吗?而且,他们的底线是如何实现的?
最容易想到的方法是循环B次,每次乘以a .但是,最后,底线是这样实现的吗?
试着时不时地判断他们的关系。
首先,我们来看看pow和* *有什么区别:
导入时间
开始=时间.时间(
打印(2 * * 100000))。
end0=time.time(
Print ((* *:),end0-start)))。
打印(功率(22100000))
end1=time.time(
Print (pow :end1-end0))。
上述结果的输出如下
到百万次方,两者所用的时间基本相同,所以本质上应该使用相同的算法。
让我们看看for循环中的模拟结果。
导入时间
开始=时间.时间(
打印(2 * * 100000))。
end0=time.time(
Print ((* *:),end0-start)))。
打印(功率(22100000))
end1=time.time(
Print (pow :end1-end0))。
r=1
对于范围(1000000):
r *=2
end2=time.time(
打印(for:),end2 - end1))))).
以上输入结果是:
虽然这是一个很可怕的对比,但是pow和* *只需要1.5秒,而for cycle需要20秒!所以可以肯定的是,pow基数肯定不是循环解决的。
电源底部实现
如果我们分析一下为什么直接循环乘法的效率变得这么低,就会发现其实有大量的重复运算。比如我们计算了22之后,又重复计算了22个结果,那么如果把这些中间的计算结果保存下来,重新使用,就可以大大减少计算量。例如,我们现在正在计算2的9次方。我们可以这样算,先算22,继续用这个结果:
(22) (22) (22) (22) (22) 2,即4442只需要计算五次。
同样的,上面的44可以复用为16162。
具体步骤如下:
deffun(a,b):
r=1
而b 1:
如果1==1: # sum运算一般可以用来取一定位数,但这里取的是最后一位。
r *=a
a *=a
B=b 1 #相当于这里的b//=2
返回r * a
接下来我们来看看pow函数的底层是如何实现的。
导入时间
开始=时间.时间(
打印(2 * * 100000))。
end0=time.time(
Print ((* *:),end0-start)))。
打印(功率(22100000))
end1=time.time(
Print (pow :end1-end0))。
r=1
对于范围(1000000):
r *=2
end2=time.time(
打印(for:),end2 - end1))))).
印刷(221000000英镑)
print(fun:,time.time )- end2).
从上面可以看出,pow函数的执行时间和自定义函数基本相同,自定义函数更快。
分析完成!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。