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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
linux安装python修改默认python版本方法
Mar 31 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
Django--权限Permissions的例子
Aug 28 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
Python基础之字符串格式化详解
Apr 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
PHP的引用详解
2015/02/22 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
Python写的一个简单DNS服务器实例
2014/06/04 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
Python中文件的读取和写入操作
2018/04/27 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
详解Python是如何实现issubclass的
2019/07/24 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
介绍一下游标
2012/01/10 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
工作推荐信范文
2014/05/10 职场文书
校车安全责任书
2014/08/25 职场文书
就业协议书范本
2014/10/08 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
文员岗位职责范本
2015/04/16 职场文书
工程质量保证书
2015/05/09 职场文书
小学运动会开幕词
2016/03/04 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL