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 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
如何使用flask将模型部署为服务
May 13 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
python处理按钮消息的实例详解
2017/07/11 Python
numpy中索引和切片详解
2017/12/15 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
年会搞笑主持词
2014/03/27 职场文书
2016年教师节慰问信
2015/12/01 职场文书