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 相关文章推荐
python基础知识小结之集合
Nov 25 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
pandas修改DataFrame列名的方法
Apr 08 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
python爬取内容存入Excel实例
Feb 20 Python
详解Python time库的使用
Oct 10 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
Python如何定义接口和抽象类
Jul 28 Python
PyCharm常用配置和常用插件(小结)
Feb 06 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
python版大富翁源代码分享
2018/11/19 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
python3让print输出不换行的方法
2020/08/24 Python
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
本科生职业生涯规划书范文
2014/01/21 职场文书
应届毕业生求职信
2014/05/26 职场文书
企业标语口号
2014/06/10 职场文书
合作经营协议书范本
2014/09/16 职场文书
财务年终工作总结大全
2019/06/20 职场文书