记录一个浮点数计算取整的问题

小学课就学过:

(a + b * c) / c = a / c + b

更简单可以化成:

b * c / c = b

之前一直知道计算机计算浮点数不精确,然而,前几天才发现,连上述式子,各种编程语言包括matlab等等都会算错

例如python:

In [1]: 28 * 40.1 / 40.1
Out[1]: 27.999999999999996

恰好当时有向上/向下取整的需求,直接导致结果差了1,调试的时候才发现问题在这里。

问题代码如下(命名略有改动):

l_length = l_count * spacing
start_index = int(math.ceil((data.start + l_length) / spacing))
end_index = int(math.ceil((data.end + l_length) / spacing))