记一次python实践中遇到的浮点数的坑

先看代码:

i = 1
while i != 1.5:
    print(i)
    i += 0.1

上面的代码输出是多少?正确答案是无限循环输出。

1
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
1.6000000000000005
1.7000000000000006
1.8000000000000007
1.9000000000000008
2.000000000000001
2.100000000000001
2.200000000000001
2.300000000000001
2.4000000000000012
2.5000000000000013
2.6000000000000014
2.7000000000000015
2.8000000000000016
2.9000000000000017
3.0000000000000018
3.100000000000002
...

原因就在于0.1不是精确表示,在循环到第5次的时候,i的实际值是1.5000000000000004。所以此程序根本就没有跳出while循环的机会。

在计算机的世界里,浮点数的存储规则决定了不是所有的浮点数都能够精确表示。有些不能精确表示的,只能无限接近,比如0.1转换成二进制是0.00011001100110011...其中0011是无限循环的。

所以在while中 !=1.5 这种表达式是要避免的。浮点数的比较同样最好能够指明精度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容