【问题标题】:How to get the correct accuracy with big integer division in python如何在python中通过大整数除法获得正确的准确性
【发布时间】:2017-03-10 03:36:31
【问题描述】:

我在下面有一个大整数,作为“最大值”。为什么将最大值除以“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

【问题讨论】:

    标签: python bignum


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这很有意义。感谢您对发生的事情的彻底解释。
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2015-11-19
    • 2019-09-20
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    相关资源
    最近更新 更多