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中 sys.argv[]的用法简明解释
Dec 20 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
django 简单实现登录验证给你
Nov 06 Python
python 经典数字滤波实例
Dec 16 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
Feb 23 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python下划线5种含义代码实例解析
Jul 10 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
python3中TQDM库安装及使用详解
Nov 18 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
phpmyadmin操作流程
2006/10/09 PHP
PHP重定向的3种方式
2013/03/07 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP微商城开源代码实例
2019/03/27 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
《观舞记》教学反思
2014/04/16 职场文书
开学典礼演讲稿
2014/05/23 职场文书
护理学专业求职信
2014/06/29 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
民主评议党员个人总结
2015/02/13 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
孝女彩金观后感
2015/06/10 职场文书
关爱空巢老人感想
2015/08/11 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS