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标准库os.path包、glob包使用实例
Nov 25 Python
python基于socket实现网络广播的方法
Apr 29 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
python异步Web框架sanic的实现
Apr 27 Python
Python Dataframe常见索引方式详解
May 27 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
Python如何批量生成和调用变量
Nov 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获得文件扩展名三法
2006/11/25 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
Yii2如何批量添加数据
2016/05/17 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
进一步了解Python中的XML 工具
2015/04/13 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
Python新手学习装饰器
2020/06/04 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
结构工程研究生求职信
2013/10/13 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
优秀部门获奖感言
2014/02/14 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
银行稽核岗位职责
2015/04/13 职场文书
大学生逃课检讨书
2015/05/04 职场文书
java设计模式--原型模式详解
2021/07/21 Java/Android
JavaScript的function函数详细介绍
2021/11/20 Javascript
Nebula Graph解决风控业务实践
2022/03/31 MySQL