単純な再帰式で遊んでいて、コードが
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.9999999999と3.0(およびそれ以前)の間にはある種の近似がありますが、実際にはここで何が起こっているのでしょうか?私にとって、浮動小数点3.0が3.0とは言えないものとして解釈されるのは奇妙に思えますが、それでも3.0と呼ばれるほど十分に近く、数回続けて呼び出されます。
私はここでコード的に何か間違ったことをしていますか、それとも私の解釈は正しいですか?もしそうなら、なぜこれが起こっているのですか?