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实现模拟登录及表单提交的方法
Jul 25 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
python 重命名轴索引的方法
Nov 10 Python
Python 元组操作总结
Sep 18 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
Python新手学习raise用法
Jun 03 Python
python中reload重载实例用法
Dec 15 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判断是否有Get参数的方法
2014/05/05 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
PHP目录操作实例总结
2016/09/27 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
美国在线家具网站:GDFStudio
2021/03/13 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
交通事故检查书范文
2014/01/30 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
借款担保书范文
2014/05/13 职场文书
网络技术专业求职信
2014/07/13 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
国情备忘录观后感
2015/06/04 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
详解Redis瘦身指南
2021/05/26 Redis
Flask response响应的具体使用
2021/07/15 Python
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏