我正在尝试实施LCM查找算法。它需要为非常大的数字找到LCM。
使用公式
找到LCMLCM(A, B) = (A * B) / GCD(A, B)
其中A和B是两个输入。
输入:226553150 1023473145
所以,LCM = (226553150 * 1023473145) / 5
它应该是46374212988031350
。
但是python发现这是46374212988031352
,这显然是一个错误。
如何解决这个问题呢 ?
答案 0 :(得分:3)
您正在使用浮点数学,因为您使用了/
真除法运算符。浮点只能近似大数,你看到的差异是由此造成的。
改为使用//
分区:
>>> (226553150 * 1023473145) // 5
46374212988031350
对整数进行平面划分永远不需要转换为浮点数,从而避免了精度问题。
或者,使用the documentation获得更高精度的数学和实数:
>>> from decimal import Decimal
>>> Decimal('226553150') * Decimal('1023473145') / Decimal('5')
Decimal('46374212988031350')
这比使用float
慢。