【问题标题】:Python: How to determine which float values can be precisely represented and raise warning when not?Python:如何确定可以精确表示哪些浮点值并在不可以时发出警告?
【发布时间】:2019-10-02 01:15:28
【问题描述】:

我知道我的 python 版本使用 64 位表示,所以应该有一些公式来计算哪些浮点数可以精确表示。

>>> 3.00000000000000022203 == 3.0
True
>>> 3.00000000000000022205 == 3.0
False

当精度级别无法准确表示时,我该如何正确捕捉?

如果目标是检查某些东西是否可以表示为 Python 浮点数(而不是简单地以任意精度精确表示 二进制浮点数),然后检查分母是幂 两个是不够的:你还需要检查分子是 适当有界。 (并且避免了下溢和溢出。)对于 一个简单的反例,考虑案例 10**23 - Mark Dickinson 来自How to determine if a decimal fraction can be represented exactly as Python float?

那篇文章只讨论了如何处理小数,也没有讨论过大的数字。

【问题讨论】:

    标签: python python-3.x overflow underflow


    【解决方案1】:

    你可以计算你的浮点字面量是否可以精确表示,但是它会怎样引发异常呢?如果你使用了一个浮点数,那是因为你需要那个浮点数。也许我不明白你在做什么。

    如果需要,您可以使用 Decimal 更准确地存储十进制文字。

    【讨论】:

    • 假设它是一个大型遗留系统,并且有一些公式会随着时间的推移大幅缩放浮点数,但由于存在显着的复合错误,可能会产生极其错误的结果。将每个浮点数转换为十进制字面量是理想的,但不能保证浮点数本身一开始就可靠,所以我们从不确定的状态开始。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多