Python中的浮点数原理与运算分析


Posted in Python onOctober 12, 2017

本文实例讲述了Python中的浮点数原理与运算。分享给大家供大家参考,具体如下:

先看一个违反直觉的例子:

>>> s = 0.
>>> for i in range(10): s += .1
>>> s
0.9999999999999999
# 错误被累加

再看一个更为普遍,直接影响判断逻辑的例子:

>>> from math import sqrt
>>> a = sqrt(2)
>>> a*a == a
False

之所以会出现以上的结果,在于 Python (更准确地说是计算机硬件体系结构)对浮点数的表示,我们来看计算机(基于二进制)对十进制小数 0.1 的表示,十进制小数向二进制小数转换的方法请见 Python十进制小数与二进制小数相互转换。将十进制小数 0.1 转换为二进制时的结果为 0.0001100110011001....,无限循环,计算机无法展示无限的结果,只能对结果进行截断,这是浮点数精度问题的根源。

“==” on floats

基于以上的考虑,当我们进行浮点数的相等比较时,要特别小心,直接使用 == 是有问题的,一种通用的做法即是,不是检测浮点数是否相等,而是检测二者是否足够接近,

>>> a = sqrt(2)
>>> abs(a*a-2) < epsilon
# 判断是否小于某一小量

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中逗号的三种作用实例分析
Jun 08 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
【python】matplotlib动态显示详解
Apr 11 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
详解python播放音频的三种方法
Sep 23 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
pycharm 对代码做静态检查操作
Jun 09 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 Python
分享一个python的aes加密代码
Dec 22 Python
python中获得当前目录和上级目录的实现方法
Oct 12 #Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 #Python
Python调用C# Com dll组件实战教程
Oct 12 #Python
python 实现一个贴吧图片爬虫的示例
Oct 12 #Python
Python实现曲线点抽稀算法的示例
Oct 12 #Python
python去除字符串中的换行符
Oct 11 #Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 #Python
You might like
PHP 源代码压缩小工具
2009/12/22 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
微信JS接口大全
2016/08/25 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
办护照工作证明范本
2014/01/14 职场文书
家电业务员岗位职责
2014/03/10 职场文书
安全技术说明书
2014/05/09 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
干部作风建设工作总结
2014/10/29 职场文书
小学生通知书评语
2014/12/31 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis