python中pow函数的用法,pythonpow函数用法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: