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递归删除指定目录及其所有内容的方法
Jan 13 Python
Python中functools模块函数解析
Mar 12 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
用python写扫雷游戏实例代码分享
May 27 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
PyTorch基本数据类型(一)
May 22 Python
python中dict使用方法详解
Jul 17 Python
python批量解压zip文件的方法
Aug 20 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
pycharm快捷键汇总
Feb 14 Python
pycharm无法导入lxml的解决办法
Mar 31 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验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
php单例模式的简单实现方法
2016/06/10 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
js 三级关联菜单效果实例
2013/08/13 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python 功能和特点(新手必学)
2015/12/30 Python
python 读取DICOM头文件的实例
2018/05/07 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
python实现二维数组的对角线遍历
2019/03/02 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
Python实现手势识别
2020/10/21 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
保护动物倡议书
2014/04/15 职场文书
机房搬迁方案
2014/05/01 职场文书
英语教师自荐信
2014/05/26 职场文书
幼师中班个人总结
2015/02/12 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
初一军训感言
2015/08/01 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
新手初学Java List 接口
2021/07/07 Java/Android
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB