相关疑难解决方法(0)

C#float无限循环

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的限制.

.net c# floating-point double loops

15
推荐指数
3
解决办法
1193
查看次数

浮点数的最大值

对于下面的循环,我期待输出,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的值吗?

c floating-point

0
推荐指数
1
解决办法
712
查看次数

标签 统计

floating-point ×2

.net ×1

c ×1

c# ×1

double ×1

loops ×1