浮点数的Python舍入错误

发布于 2021-02-02 23:21:36

我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少delta = 0.29delta = 0.58的结果。在调查中,我注意到以下Python代码:

for i_delta in range(0, 101, 1):
  delta = float(i_delta) / 100

  (...)

filename = 'foo' + str(int(delta * 100)) + '.dat'

生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为0.28999999999999998。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本:

import sys

n = int(sys.argv[1])

for i in range(0, n + 1):
  a = int(100 * (float(i) / 100))
  if i != a: print i, a

而且我看不到发生这种舍入错误的数字中的任何模式。为什么这些特定数字会发生这种情况?

关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    不能由精确的2的幂构成的任何数字都不能完全表示为浮点数。它需要被近似。有时最接近的近似值会小于实际数字。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看