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的web框架中配置app的教程
Apr 30 Python
Python函数返回值实例分析
Jun 08 Python
Python中enumerate函数代码解析
Oct 31 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
Python日志无延迟实时写入的示例
Jul 11 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 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+DBM的同学录程序(3)
2006/10/09 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
webpack4简单入门实例
2018/09/06 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
python实现录音小程序
2020/10/26 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
使用python实现简单五子棋游戏
2019/06/18 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python的等深分箱实例
2019/11/22 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
中海讯通笔试题
2015/09/15 面试题
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
初中同学聚会感言
2014/02/11 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
租房协议书
2014/04/10 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
总结Python连接CS2000的详细步骤
2021/06/23 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript