我试图计算多维数据集的总和作为一个更大问题的一部分,我已经陷入困境。在下面编写的代码(相同函数的两个变体)中,当我传递一个较大的值,如45001
时,我在两个函数中得到冲突的结果,如
import math
def cube_sum(n):
return int(math.pow((n*(n+1)/2),2));
def cube_sum1(n):
if n%2 != 0: return int(math.pow(n*((n+1)/2),2))
else: return int(math.pow((n/2)*(n+1),2));
def calc:
print('1:',cube_sum(45001));
print('2:',cube_sum1(45001));
print('3:',(int(45001*45002/2)**2)); # gives the correct answer
即使所有打印值都应该相同(显然),我得到的输出为
1: 1025292944081384960
2: 1025292944081384960
3: 1025292944081385001
在尝试分析时,我偶然发现了以下内容
math.sqrt(1025292944081384960) == math.sqrt(1025292944081385001) # returns true
这里发生了什么?