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 相关文章推荐
windows下wxPython开发环境安装与配置方法
Jun 28 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
python的pip安装以及使用教程
Sep 18 Python
Python高级特性切片(Slice)操作详解
Sep 27 Python
python根据时间获取周数代码实例
Sep 30 Python
django序列化serializers过程解析
Dec 14 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Python常见反爬虫机制解决方案
Jun 01 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python中_del_还原数据的方法
Dec 09 Python
python matlab库简单用法讲解
Dec 31 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 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手册及PHP编程标准
2006/12/17 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP中session变量的销毁
2014/02/27 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
中止javascript执行的方法
2014/02/14 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python pass 语句使用示例
2014/03/11 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python 美化输出信息的实例
2018/10/15 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
使用python实现对元素的长截图功能
2019/11/14 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python绘制分布折线图的示例
2020/09/24 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
自我评价是什么
2014/01/04 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
护士辞职信怎么写
2015/02/27 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript