一大一小两个整数相除时得到错误答案

Getting the wrong answer when dividing two integers, one large and one small

我正在尝试使用质数筛法找出某些数的所有质因数。在我的代码中,我最终不得不用一个非常大的数字除以一个小数字来找到一个超出我使用的筛子范围的素因子。这应该不是问题,事实上,该方法对我检查的每个数字都非常有效,除了一个。

我 运行 遇到的问题是,我将这个大数除以 51 以找到质因数,然后当我将它乘以 51 以检查它是否等于原始数...它确实'T!!

无论我将其转换为 int 还是将其保留为科学记数法中的 float,它都不起作用。

我知道浮动并不完美,但我不知道如何解决这个奇怪的错误。我什至将数字插入计算器并得到了正确答案,但我的代码给了我错误的答案。

这是怎么回事? 如果您 运行 我的代码,您会看到检查 return False,而它们对两者都应为 True。

正如我之前所说,此方法适用于我正在测试的其中一个数字,该数字具有超出我使用的筛子范围的因素,我遇到问题的只是这个特定的大数字。

正确答案应该是1,176,462,117,668,023,508,828,242,241 我得到的答案是 1,176,462,117,668,023,481,334,235,136

l_number = 59999568001069198950240354291
answer = 59999568001069198950240354291 / 51
int_answer = int(answer)
check = int_answer*51
check2 = answer * 51

print("The large number is: {:,d}".format(l_number))
print("Large number divided by 51: ", answer)
print("If the check is == original number: ", check2 == 59999568001069198950240354291)
print("Large number divided by 51 as an integer: {:,d}".format(int_answer))
print("That answer * 51 (should be original number): {:,d}".format(check))
print("If the integer check is == original number: ", check == 59999568001069198950240354291)

正如您指出的那样,由于 64 位双精度精度有限,浮点数除法并不准确。

如果您使用整数除法(在 Python 3 中),它会起作用

answer = 59999568001069198950240354291 // 51

之所以有效,是因为 Python 使用了任意精度的整数运算。