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

时间:2017-03-10 03:36:31

标签: 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

打印的值为:

no27 = 35882855955274315680000000
div27 = 3.5882855955274316e+25
modno27 = 0
moddiv27 = 8.0

1 个答案:

答案 0 :(得分:6)

假设这是Python 3,您使用了真正的除法,它计算float个结果,但float(基于C double)具有Python int s的表示限制不要(高于〜2**53,它不能表示每个整数值。)

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

相关问题