如何在python中使用大整数除法获得正确的精度

use*_*317 2 python biginteger bignum

我有一个大整数,如'max'.为什么最大值除以'27'并不等于完全省略第一个数字'27'.从技术上讲它们应该是平等的,但在python中它们不是.在这个例子中,如何通过将最大值除以'27'得到相同的答案?

max = 27*37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44
no27 = 37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44
div27 = (max/27)
modno27 = no27%40
moddiv27 = div27%40
Run Code Online (Sandbox Code Playgroud)

打印的值是:

no27 = 35882855955274315680000000
div27 = 3.5882855955274316e+25
modno27 = 0
moddiv27 = 8.0
Run Code Online (Sandbox Code Playgroud)

Sha*_*ger 6

假设这是Python 3,你使用了真正的除法来计算float结果,但是float(基于C double)具有Python int不具备的表示限制(上面的〜2**53,它不能代表每个整数值).

当您知道数字可以被整除时,请使用//保留int-ness.如果它不能被完全整除,你可以向下舍入,例如5 // 3 == 1.如果这是不可接受的,您可以使用divmod一次计算商和余数(因此没有信息丢失)或fractions.Fraction类型或decimal.Decimal类型(具有适当的精度)来在单个结果类型中获得更精确的结果.