python执行精确的小数计算方法


Posted in Python onJanuary 21, 2019

在进行浮点数计算时它们无法精确表达出所有的十进制小数位。

a = 4.1
b = 5.329
print(a+b)
 
9.428999999999998

这些误差实际上是底层CPU的浮点运算单元和IEEE754浮点数算数标准的一种“特性”。python的浮点数类型保存的数据采用的是原始表示形式,因此使用float实例时就不能避免这样的误差。

我们可以使用decimal模块避免这种操作(如果不介意牺牲下性能):

from decimal import Decimal
a = Decimal('4.1')
b = Decimal('5.329')
print(a+b)
 
9.429

注意Decimal的参数必须是字符串,不能是浮点型,否则误差依旧存在。

decimal模块的主要功能是允许控制计算过程中的各个方面,包括数字的尾数和四舍五入。

from decimal import Decimal
from decimal import localcontext
a = Decimal(4.1)
b = Decimal(5.329)
print(a/b)
print('================')
with localcontext() as ctx:
  ctx.prec = 3
  print(a/b)
 
0.7693751172827922400071261708
================
0.769

getcontext也可以实现和localcontext一样的功能

from decimal import Decimal, getcontext
a = Decimal(4.1)
b = Decimal(5.329)
getcontext().prec = 3
print(a/b)
 
0.769

误差我们不能完全消除,我们只能尽力优化算法,使得误差尽可能小。在大数和小数相加时要格外注意。

nums = [3.21e+18, 1, -3.21e+18]
print(sum(nums))
print('=========================')
import math
res = math.fsum(nums)
print(res)
 
0.0
=========================
1.0

以上这篇python执行精确的小数计算方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
Python生成pdf文件的方法
Aug 04 Python
Python中random模块生成随机数详解
Mar 10 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
浅谈python新式类和旧式类区别
Apr 26 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
Python 中@property的用法详解
Jan 15 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
如何利用python读取micaps文件详解
Oct 18 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 #Python
python dict 相同key 合并value的实例
Jan 21 #Python
关于python之字典的嵌套,递归调用方法
Jan 21 #Python
对python 合并 累加两个dict的实例详解
Jan 21 #Python
python去重,一个由dict组成的list的去重示例
Jan 21 #Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 #Python
python3.6数独问题的解决
Jan 21 #Python
You might like
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
浅析PHP水印技术
2007/02/14 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
js 调整select 位置的函数
2008/02/21 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python有序查找算法之二分法实例分析
2017/12/11 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
使用html5制作loading图的示例
2014/04/14 HTML / CSS
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
求职简历自荐信范文
2013/10/21 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
研修第一天随笔感言
2014/02/15 职场文书
会务接待方案
2014/02/27 职场文书
新年晚会主持词
2014/03/24 职场文书
生日宴会策划方案
2014/06/03 职场文书
租房协议书
2014/09/12 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2015国庆节宣传语
2015/07/14 职场文书
Go 语言结构实例分析
2021/07/04 Golang
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫