我正在玩一个简单的递归公式,并注意到代码
p = 2.0
while p < 3.0:
print p
p = (6+p)**(0.5)
将打印
*snip*
...
2.99999999952
2.99999999992
2.99999999999
3.0
3.0
3.0
3.0
3.0
3.0
当然,在 2.99999999999 和 3.0(以及之前)之间会有某种近似值,但这里实际发生了什么?对我来说,浮点 3.0 将被解释为不完全是 3.0 但仍然足够接近可以连续多次称为 3.0 似乎很奇怪。
我是在代码方面做错了什么,还是我的解释正确?如果是这样,为什么会发生这种情况?