python 3.5.x貌似遇到了bug

moshlwx 2016-09-09 12:48:09



>>> 0.1 + 0.01
0.11
>>> 0.1 + 0.02
0.12000000000000001
>>> 0.1 + 0.03
0.13
>>> 0.1 + 0.05
0.15000000000000002
>>> 0.1 + 0.06
0.16


这个是bug还是有什么原因造成的?在python 2.6上试了下没有类似错误啊。
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hijack00 2016-09-09
  • 打赏
  • 举报
回复
引用 4 楼 moshlwx 的回复:
[quote=引用 1 楼 hijack00 的回复:] 这个不是bug,浮点数毕竟还是用32位或者64位比特(也有其他位数)表示的,不能表示任意实数,计算机中表示的浮点数实际上是计算机所能表示的浮点数中最接近实际值的那一个。这样就必然会存在一个“量化误差”
好的 多谢指教,我才初学,那么这种性质会对以后实际应用中有影响吗,是不是有什么规范化的方法避免这种误差呢?[/quote] 这是系统误差,没办法消除啊。唯一的方法就是用更高的精度来表示啊,比如使用double类型来运算精度肯定会比float类型高。 不过,对于日常应用,float或者double类型也基本上够用了吧?不需要过多关注,除非你有特殊需求。
moshlwx 2016-09-09
  • 打赏
  • 举报
回复
引用 2 楼 ligengyong2010 的回复:
浮点数计算是有误差,因为计算机是用位数表示的,不能完整的表达数字的范围,其他编程语言也会有这个问题
好的 多谢指教,我才初学,那么这种性质会对以后实际应用中有影响吗,是不是有什么规范化的方法避免这种误差呢?
moshlwx 2016-09-09
  • 打赏
  • 举报
回复
引用 1 楼 hijack00 的回复:
这个不是bug,浮点数毕竟还是用32位或者64位比特(也有其他位数)表示的,不能表示任意实数,计算机中表示的浮点数实际上是计算机所能表示的浮点数中最接近实际值的那一个。这样就必然会存在一个“量化误差”
好的 多谢指教,我才初学,那么这种性质会对以后实际应用中有影响吗,是不是有什么规范化的方法避免这种误差呢?
CDSoftwareWj 2016-09-09
  • 打赏
  • 举报
回复
关山路遥 2016-09-09
  • 打赏
  • 举报
回复
浮点数计算是有误差,因为计算机是用位数表示的,不能完整的表达数字的范围,其他编程语言也会有这个问题
hijack00 2016-09-09
  • 打赏
  • 举报
回复
这个不是bug,浮点数毕竟还是用32位或者64位比特(也有其他位数)表示的,不能表示任意实数,计算机中表示的浮点数实际上是计算机所能表示的浮点数中最接近实际值的那一个。这样就必然会存在一个“量化误差”

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧