python-3.x - Python浮点精度和
问题描述
我在python中有以下数组
n = [565387674.45, 321772103.48,321772103.48, 214514735.66,214514735.65,
357524559.41]
如果我总结所有这些元素,我会得到:
sum(n)
1995485912.1300004
但是,这个总和应该是:
1995485912.13
通过这种方式,我知道了浮点“错误”。我已经使用了isclose()
numpy 的函数来检查更正的值,但是
这个限制是多少?有什么办法可以减少这种“错误”?
这里的主要问题是错误传播到其他操作,例如,以下断言必须为真:
assert (sum(n) - 1995485911) ** 100 - (1995485912.13 - 1995485911) ** 100 == 0
.
解决方案
这是浮点数的问题。一种解决方案是以字符串形式表示并使用decimal
模块:
n = ['565387674.45', '321772103.48', '321772103.48', '214514735.66', '214514735.65',
'357524559.41']
from decimal import Decimal
s = sum(Decimal(i) for i in n)
print(s)
印刷:
1995485912.13
推荐阅读
- postgresql - PostgreSQL:如何使用 GnuCOBOL 将不合规 (UTF8) 的原始字节存储为 bytea?
- zxing.net - ZXing 将字母 Code 128 识别为 UPC E
- woocommerce - Woocommerce api集成帖子在流明中不起作用
- jdbc - Zeppelin 版本 0.7.3 - 连接到 Hive - 错误“找不到解释器 jdbc”
- python - 当我使用来自其他模型的字段时,如何使用“store = True”使计算字段工作?
- php - 价格警报:如何将价格产品从产品列表传递到弹出窗口?
- java - Maven“正在扫描项目......”冻结,卡住,永无止境......它甚至无法写出下一个信息行( ------ )
- javascript - jQuery点击语句
- ffmpeg - 使用 ffmpeg 对多个网络输入进行视频叠加
- c# - LocalPlayer的子对象不是localplayer?