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, 则表示对结果进行取模运算。
版权归原作者 blauschneiden 所有, 如有侵权,请联系我们删除。