【问题标题】:Finding accurate values while dividing [duplicate]在划分时找到准确的值[重复]
【发布时间】:2021-10-07 01:06:54
【问题描述】:

在 Python 中,在划分较大的值时,我得到的输出不准确,例如:-

(1227073724601519345/101) = 12149244798034845。但是在Python中它变成了

(1227073724601519345/101) = 1.2149244798034844e+16 转换为 int 为 12149244798034844。

如你所见

( correct_output - approx_output ) = 1

有什么办法可以避免这种情况吗?将更大的数字相乘时不会出现这种不准确性,例如:-

(123468274768408415066917747313280346049^2) - (56 * (16499142225694642619627981620326144780^2)) = 1

这是准确的。

【问题讨论】:

    标签: python division approximation


    【解决方案1】:

    计算机常用IEEE 754 Standard for Floating-Point Arithmetic。这意味着浮点数的精度有限,只有 53 位(大约 15 或 16 个十进制数字)。

    由于您使用了(x / y),Python 给了您一个浮点结果,并且结果需要超过 15 位十进制数字,因此不准确。

    但是 Python 也有一个整数除法运算符 (//)。 Python 3 中的整数是多精度数,这意味着它们可以表示任意大整数(仅受可用内存限制......)。这就是为什么在乘以大数时得到准确结果的原因。所以要得到准确的整数结果,你应该使用这个:

    1227073724601519345//101
    

    正如预期的那样12149244798034845

    【讨论】:

    • 成功了,谢谢,
    【解决方案2】:

    使用整数除法,例如 1227073724601519345 // 101。

    【讨论】:

    • 你的答案是正确的,但缺乏一点解释。
    • @Vytas 成功了,谢谢,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2020-08-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多