C#(.Net 3.5 SP1)中的以下代码是我机器上的无限循环:
for (float i = 0; i < float.MaxValue; i++) ;
Run Code Online (Sandbox Code Playgroud)
它达到了16777216.0和16777216.0 + 1的评估值为16777216.0.但在这一点上:我+ 1!=我.
这是一些疯狂.
我意识到浮点数的存储方式存在一些不准确之处.而且我已经读过整数大于2 ^ 24而不能正确存储为浮点数.
上面的代码仍然应该在C#中有效,即使数字无法正确表示.
为什么不起作用?
你可以在double中获得同样的效果,但这需要很长时间.9007199254740992.0是double的限制.
对于下面的循环,我期待输出,sum = 20e6但输出是sum = 1.67772e+07.
float sum=0.0f;
for(i=0;i<20e6;i++)
sum = sum + 1.0f;
printf("sum = %g\n", sum);
Run Code Online (Sandbox Code Playgroud)
问题1:为什么sum浮动不能保持大于1.67772e07?的值?
问题2:如果我在循环中更改语句,sum = sum + 1.001f;则sum的最终值为2.32229e+07.为什么总和的价值有所不同?
问题3:我们可以在上面的循环中控制这种行为,这样我们可以使用float来表示大于1.67772e07仍然增加1.0f的值吗?