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
def convert(n, k, z):
	return sum(map(lambda x:math.pow(x+1, k), range(n)))%z
n, k, z = 1234, 8, 2020
print(convert(n, k, z)) 

答案是:

108.0

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

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

答案是:

253

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值