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实现的jpg格式图片修复代码
Apr 21 Python
python统计文本文件内单词数量的方法
May 30 Python
Python计算一个文件里字数的方法
Jun 15 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
Aug 17 Python
python scipy卷积运算的实现方法
Sep 16 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
Python中私有属性的定义方式
Mar 05 Python
python实现的web监控系统
Apr 27 Python
python中opencv实现图片文本倾斜校正
Jun 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
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
php实现图片添加水印功能
2014/02/13 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
javascript生成大小写字母
2015/07/03 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
基于python历史天气采集的分析
2019/02/14 Python
python多线程http压力测试脚本
2019/06/25 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
见习期自我鉴定
2013/11/07 职场文书
省三好学生申请材料
2014/01/22 职场文书
销售人员获奖感言
2014/02/05 职场文书
家电业务员岗位职责
2014/03/10 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python