You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中浮点数等式正确编写及精度问题解决方法

Python浮点数等式判断的精度问题解决方法

这是典型的浮点数二进制存储精度误差导致的问题:70/23是一个无限循环的二进制小数,计算机无法用有限位二进制精确表示它,只能存储近似值,后续计算时这个微小误差会被放大,最终得到接近-481但存在极小数尾差的结果。

解决方法有以下几种,可根据场景选择:

  • 近似阈值比较(最常用):不要直接判断浮点数是否相等,而是判断两者的差值绝对值是否小于一个极小的阈值(比如1e-9,可根据精度需求调整):
slope = 70 / 23
c = 9
calculated = slope * -161 + c
target = -481

# 用阈值判断近似相等
if abs(calculated - target) < 1e-9:
    print(True)
else:
    print(False)
  • 使用decimal模块精确控制精度:适合对数值精度要求极高的场景,通过设置精度来避免近似误差:
from decimal import Decimal, getcontext

# 设置足够计算精度的位数
getcontext().prec = 20
slope = Decimal(70) / Decimal(23)
c = Decimal(9)
calculated = slope * Decimal(-161) + c

# 此时计算结果为精确的-481
print(calculated == Decimal(-481))  # 输出 True
  • 改用分数运算:用fractions模块以分数形式存储和计算,完全避免浮点数误差:
from fractions import Fraction

slope = Fraction(70, 23)
c = Fraction(9)
calculated = slope * (-161) + c

# 计算结果为Fraction(-481, 1),等价于整数-481
print(calculated == -481)  # 输出 True

内容的提问来源于stack exchange,提问作者Changnam Hong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:41:19