python 浮点数精度不准确_python 浮点数不精确原因
今天遇到有人问我哥问题,
a = 7.1sum= a / 1000
print(sum)
输出:0.0070999999999999995
问:不应该是0.0071吗?怎么多了那么多小数位?我虽然知道这是正常情况,但含糊其辞说不清楚,上网差了下原因,以此记录。
其实这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾。
我们知道,将一个小数转化为二进制表示的方式是,不断的乘2,取其中的整数部分。例如:
(1) 0.625*2 = 1.25, 整数部分为1,小数部分为0.25
(2) 0.25 * 2 = 0.5 , 整数部分为0,小数部分为0.5
(3) 0.5 * 2 = 1 , 整数部分为1,小数部分为0
所以0.625的二进制表示就是0.101
然而有些小数,例如0.4,并不能够精确的转化为二进制表示,用上面的这种方法计算:
(1) 0.4*2=0.8 整数部分为0,小数部分为0.8
(2) 0.8*2=1.6 整数部分为1,小数部分为0.6
(3) 0.6*2=1.2 整数部分为1,小数部分为0.2
(4) 0.2*2=0.4 整数部分为0,小数部分为0.4
(5) 0.4*2=0.8 整数部分为0,小数部分为0.8
(6) 0.8*2=1.6 整数部分为1,小数部分为0.6
(7) 0.6*2=1.2 整数部分为1,小数部分为0.2
……
所以0.4转化为二进制,应该是0.0110... 这样一个无限循环小数。
计算机的内存、cpu寄存器等等这些硬件单元都是有限的,只能表示有限位数的二进制位,因此存储的二进制小数就会和实际转换而成的二进制数有一定的误差。
一些解决的途径
Decimal
使用这个模块不会出现任何小误差。
>>> from decimal importDecimal>>> a = Decimal('4.2')>>> b = Decimal('2.1')>>> a +b
Decimal('6.3')>>> print(a +b)6.3
>>> (a + b) == Decimal('6.3')
True
round()内置方法
>>> round(2.635, 2)2.63
参考:
https://www.zhihu.com/question/25457573
https://www.jb51.net/article/127394.htm
python 浮点数精度不准确_python 浮点数不精确原因相关推荐
- python 浮点数精度不准确_浮点数的 “floor division” (例如在python中)是否会导致精度不准?...
guido van rossum写了一篇博客,解释了为什么在python中整数除法(例如,a // b是"底除法")--商被四舍五入为负无穷大.相应地,a % b的符号与b的符号相 ...
- python理解浮点数运算的误差_Python 浮点数运算
浮点数用来存储计算机中的小数,与现实世界中的十进制小数不同的是,浮点数通过二进制的形式来表示一个小数.在深入了解浮点数的实现之前,先来看几个 Python 浮点数计算有意思的例子: 0.1 == 0. ...
- python怎么使用int四舍五入_python浮点数舍入(ROUND)方式总结
Round的英文含义,就有舍入的意思,最典型的就对浮点数的四舍五入.其实,存在多种round方式,本文总结python支持的浮点数的各种舍入方式. ROUND DOWN ROUND DOWN的含义是, ...
- 在python中浮点数怎样转整数_python 浮点数 转 整数python函数每日一讲 - all()
W WW.002pc .COM对<python 浮点数 转 整数python函数每日一讲 - all()>总结来说,为我们python培训很实用. all(iterable) 版本:该函数 ...
- python中ioerror怎么解决_Python IOError错误异常原因|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ python语言IOError错误一般多发生在对文件操作报错时,表示要打开的文件不存在,当然能引发IOEr ...
- python如何区分文件类型_Python使用filetype精确判断文件类型
filetype.py Small and dependency free Python package to infer file type and MIME type checking the m ...
- 关于python的浮点数类型、以下_python入门教程Python 浮点数数据类型详解 [学习 Python 必备基础知识][看此一篇就够了]...
python基础语法.jpg 您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其 ...
- python 浮点数精度丢失_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源...
浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源 无论在java python javaScript里面都存在 1+ 2!== 3 问题,这个问题的产生根源在于计算存储数字是二进制,对无限循环小 ...
- python float精度问题_Python之☞float浮点数精度问题
(下面是精度漏洞的问题-转自其它) 从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range(10): x += 0.1 print( ...
最新文章
- loj2538 「PKUWC2018」Slay the Spire 【dp】
- linux怎么制作运行包,简单 RPM 包制作
- IdentityServer4-MVC+Hybrid实现Claims授权验证(四)
- java ipmitool_ipmitool使用手册
- Android 系统(38)---Android抓取各种log的方法
- (五)洞悉linux下的Netfilteriptables:如何理解连接跟踪机制?(1)
- 微博三方登陆原理讲解
- 跳一跳python源码_跳一跳源码(python 实现 跳一跳游戏 代码解析)
- 全网粉丝200万,他是如何打造个人IP账号的?
- linux切换root 权限,【linux】sudo su切换到root权限
- C++ 笔试面试题 ~[有答案]
- 苹果严打iMessage垃圾短信
- 数据挖掘入门学习心得
- echarts配置及专业k线作图工具
- 宿舍管理系统的设计与实现/学生宿舍管理系统
- 域名之父—蔡文胜 (下篇)
- MySQL日期转换为空问题
- python识别图片中的物体_python3+opencv3识别图片中的物体并截取的方法
- 《操作系统-真象还原》11. 用户进程
- JVM C1 编译优化:空检查擦除