在我的机器上,以下C#(.Net 3.5 SP1)代码是一个无限循环:
for (float i = 0; i < float.MaxValue; i++) ;
它达到了数字16777216.0,而16777216.0 + 1的计算结果为16777216.0。然而在这一点上:i + 1!= i。
这有些疯狂。
我意识到浮点数存储存在一定的不准确性。我已经阅读过大于2^24的整数无法以浮点数正确存储的情况。
即使该数字无法正确表示,上面的代码在C#中应该是有效的。
为什么它不起作用?
你可以使用double得到相同的结果,但需要很长时间。9007199254740992.0是double的限制。
16777216.0
是最接近16777217.0
的单精度浮点数。 - Anon.