我对这段代码感到很困惑。
这就是我想要它做的事情:从“v”值5开始,执行其余的函数/计算,将“v”值增加0.01,执行函数/计算,然后增加“v”值再次增加0.01,执行功能...执行此操作500次或直到达到10.00的“v”值,以更容易编码为准。
此处是我的代码:
//start loop over v
for(iv=5;iv<=500;iv++) {
v=0.01*iv;
//Lots and lots of calculations with v here
}
这是我得到的:我尝试设置iv&lt; = 10所以它只进行了10次循环,所以我可以先测试它,然后再将它放在整晚。它只做了6个循环,从v = 0.05开始到0.1结束。所以问题是a)它没有运行10个循环,b)它没有从5.00开始,它从0.05开始。
任何帮助将不胜感激。
编辑:神圣的废话,这么多的答案!到目前为止,我已经尝试了两个不同的答案,两者都有效!我一直在盯着这个并且改变代码3个小时,简直不敢相信。答案 0 :(得分:7)
您需要从iv = 500
开始。如果您想要10个循环,iv++
是更新,那么您将在510
之前停止。
原因:v = 0.01*iv
,因此v = 5
表示iv = 5/0.01 = 500
。至于迭代次数,如果你的for循环的格式为for (x = N; x < M; x++)
(常量N
和M
),那么max(0, M-N)
循环将被执行,如果{{1}在循环中没有改变,并且没有奇怪的东西(例如溢出,负数的隐藏转换为无符号等)。
修改强>
而不是使用x
,v = 0.01 * iv
可能更准确。原因:0.01在浮点时不能完全表示,但100.0是。
答案 1 :(得分:2)
更改SiegeX的代码,使其使用整数(“更准确”):
double dv;
int iv;
for(iv = 500; dv <= 1000; iv += 1)
{
dv = (double)iv / 100.0;
}
答案 2 :(得分:0)
double iv;
for(iv = 5.0; iv <= 10.0 ; iv += 0.01) {
/* stuff here */
}
答案 3 :(得分:0)
int i;
double v;
v = 5;
for (i = 0; i < 500; i++)
{
v += 0.01;
// Do Calculations Here.
if (v >= 10.00) break;
}
这给你们两个。这将最多迭代500次,但如果v值达到(或超过)10.00,则会突破该循环。
如果你只想要一个或另一个:
10.00版本:
double v;
v = 5.0;
while ( v < 10.00 )
{
v += 0.01;
// Do Calculations Here.
}
500次迭代版本:
double v;
int i;
v = 5.0;
for( i = 0; i < 500; i++ )
{
v += 0.01;
// Do Calculations.
}
(请注意,这不是C99,它允许在循环中使用更清晰的声明语法。)
答案 4 :(得分:-1)
iv <= 10
不会对10个循环执行此操作,直到iv
大于10才会执行此操作。
答案 5 :(得分:-1)
//start loop over v
for(iv=0;iv<500;iv++) //loop from 0 to 499
{
v=v+0.01; //increase v by 0.01
//Lots and lots of calculations with v here
}
这应该做到