1e9+7和10**9+7竟然导致两种结果
练习一个快速幂算法题目的时候发现了这个很有意思的问题,但是我也不知道为什么。代码如下
#快速幂运算
MOD = 10 ** 9 + 7
pow = 10000
def fun(base , power , mod):
result = 1
while power > 0:
if power % 2 != 0:
result = (result * base) % mod
power = power // 2
base = (base * base) % mod
return result
a = fun(9 , pow , MOD)
b = fun(8 , pow , MOD)
c = fun(7 , pow , MOD)
result = (a - 2 * b + c) % MOD
if result < 0:
result += MOD
print(result)
要计算的就是9**10000-2*8**10000+7**10000,如果MOD取10**9+7的话,是正确答案157509472。
但是如果改为1e9+7的话,结果就变为了793962873.0了。
这是为什么呢?我觉得很神奇,因为这两个理论上是等价的,只是数据类型不同,求解!
推荐文章: