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编码类型转换方法详解
Jul 01 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
如何通过python画loss曲线的方法
Jun 26 Python
Python动态语言与鸭子类型详解
Jul 01 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
vscode调试django项目的方法
Aug 06 Python
python迷宫问题深度优先遍历实例
Jun 20 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防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
原生js生成图片验证码
2020/10/11 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python多进程原理与用法分析
2018/08/21 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
Unix如何在一行中运行多个命令
2015/05/29 面试题
应届毕业生求职信范文分享
2013/12/26 职场文书
五年级语文教学反思
2014/01/30 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
护理专业自荐信范文
2014/02/26 职场文书
廉洁校园实施方案
2014/05/25 职场文书
项目工作说明书
2014/07/29 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
JavaScript实现登录窗体
2021/06/22 Javascript
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python