0


python 中 math.pow() 和 pow() 的区别

python 中 math.pow 和 pow 的区别

在做算法题的时候发现 python 中的 math.pow() 和 pow() 计算结果不太一样,在网上搜索了一下,看了简书上一位博主写的文章,觉得例子很有代表性,所以拿过来做一下笔记。

我们可以先做一道算法题:

给定n, k和z,计算:

      1
     
     
      k
     
    
    
     +
    
    
     
      2
     
     
      k
     
    
    
     +
    
    
     
      3
     
     
      k
     
    
    
     +
    
    
     
      4
     
     
      k
     
    
    
     +
    
    
     .
    
    
     .
    
    
     .
    
    
     +
    
    
     
      n
     
     
      k
     
    
   
   
    1^k + 2^k +3^k +4^k + ... + n^k
   
  
 1k+2k+3k+4k+...+nk,结果取模 z

如果使用 math.pow() 函数,写法是这样的:

import math
defconvert(n, k, z):returnsum(map(lambda x:math.pow(x+1, k),range(n)))%z
n, k, z =1234,8,2020print(convert(n, k, z))

答案是:

108.0

真的很奇怪,答案为什么是float类型,后来才知道 math.pow() 函数会自动把输入的参数转换成float。接下来我们把 math.pow() 函数替换成 pow() 函数,看看结果会变成什么:

defconvert(n, k, z):returnsum(map(lambda x:pow(x+1, k),range(n)))%z
n, k, z =1234,8,2020print(convert(n, k, z))

答案是:

253

可以看到这次输出的答案是整型。为什么2次输出的结果大小也会不一样呢,因为 float 类型在运算过程中是会产生误差的,累计计算次数越多,误差累积也就越多。当 n 比较小的时候,这个误差可以忽略不计,但随着 n 的增大,累计误差也会越来越大。

顺便提一下, pow() 函数的参数是 **pow(x, y[, z])**,如果传入 z, 则表示对结果进行取模运算。

标签: python

本文转载自: https://blog.csdn.net/blauschneiden/article/details/118047693
版权归原作者 blauschneiden 所有, 如有侵权,请联系我们删除。

“python 中 math.pow() 和 pow() 的区别”的评论:

还没有评论