循环里怎么使用俩个变量呀?

mirroatl187 2013-12-24 10:50:55
for(UINT x = 0, float fi = 0.1; x < uXLg; x++)
{

}
...全文
267 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirroatl187 2013-12-28
  • 打赏
  • 举报
回复
float x = 1.0f; float s = 0.0f; for(int j = 1; j <=10000; j++) { s += x; x++; } int x1 = 1; int s1 = 0; for(int j = 1; j <=10000; j++) { s1 += x1; x1++; } printf("s=%f,s1=%d",s,s1); 大哥怎么float累加出来的是 50002896 ????应该是 50005000
引用 6 楼 lm_whales 的回复:
这么做,你看如何:

//这里把条件设置的极为复杂,表示可以任意设置条件,当然循环最好能够退出,

//三个表达表达式,都是任意的
//只是用声明语句,做初始化语句,好象只能声明一个变量。

//这个需要看标准和编译器具体如何实现。

//不过,没有必要,追求那么完美;
//不必一定要在,循环内部,声明循环变量。
//
int combineCondition(UINT x,int x_max,float y,float ymax)
{

int t =rand()%4;
switch(t){
case 0:return x < xmax ;
case 1:return y < ymax;
case 2:return x < xmax && y< ymax;
case 3:return x < xmax || y< ymax;
return 0;
}
void test()
{
srand(time(NULL));
UINT x ;
float fi;
for( x = 1,fi = 0.1; //e1 初始化表达式,初始化某些变量 
    combineCondition(x,100,y,50.67); //e2 条件表达式;循环的执行条件,根据需要设置
    x++, fi += 0.01                  //e3 自增表达式;执行循环语句后,需要处理的事情。
    ){
     printf("x = %u,fi =%f",x,fi);  //循环语句 
}

}
lm_whales 2013-12-28
  • 打赏
  • 举报
回复
1)自增,自减运算符 ++,-- , 一般用于 整数,指针。 浮点数,也许可用,不过,没法保证一定准确。 要想精确,计算,用整数,定点数计算,如果结果会溢出。 用高精度计算。 你这里,先改用double 看精度够不够,不够,还是用高精度计算吧。
lm_whales 2013-12-28
  • 打赏
  • 举报
回复
±1~(2^25)-1
lm_whales 2013-12-28
  • 打赏
  • 举报
回复
±1~(2^24)-1
lm_whales 2013-12-28
  • 打赏
  • 举报
回复
引用 10 楼 mirroatl187 的回复:
出现这种情况 是什么原因造成的呀??? [quote=引用 9 楼 lm_whales 的回复:] 1)自增,自减运算符 ++,-- , 一般用于 整数,指针。 浮点数,也许可用,不过,没法保证一定准确。 要想精确,计算,用整数,定点数计算,如果结果会溢出。 用高精度计算。 你这里,先改用double 看精度够不够,不够,还是用高精度计算吧。
[/quote] float 有23位尾数,加上一个隐藏位,一共24位,可以精确表示24位整数。 (±1~2^24 再加上0) 在这个范围内,也许自增操作是精确的。 如果该float,不是整数,可能连24Bit整数。以内的加减,自增,自减,都不能保证是精确的。 因为对于纯小数 0.5,0.25,0.125,0.0625 等 2^-i 是 精确的。 指数i为-1~-24 或者 他们的组合可能也是精确的。绝对值,可以用 2^n* (Σ xi* 2^-i) 表示的浮点数,也是精确的。 +0,-0 当然也是精确的。 其它数据,包括可以精确表示的小数和整数的和与差,都不能保证是精确的。 0.1 这个数据,不能用 2^n* Σ (xi* (2^-i)) 精确表示( i = 1~24) 虽然是纯小数,也不能精确表示。 能用 2^n* Σ (xi* (2^-i))表示的数,也有一部分是不能精确表示的; 因为浮点数的尾数和指数位数都是有限的 而实数有无限多个。 PS: 要想清楚知道原因,还需要了解IEEE浮点数格式。 这里就不罗唆了。
mirroatl187 2013-12-28
  • 打赏
  • 举报
回复
出现这种情况 是什么原因造成的呀???
引用 9 楼 lm_whales 的回复:
1)自增,自减运算符 ++,-- , 一般用于 整数,指针。 浮点数,也许可用,不过,没法保证一定准确。 要想精确,计算,用整数,定点数计算,如果结果会溢出。 用高精度计算。 你这里,先改用double 看精度够不够,不够,还是用高精度计算吧。
jiandingzhe 2013-12-25
  • 打赏
  • 举报
回复
while(1) {}
大奶兔白糖 2013-12-25
  • 打赏
  • 举报
回复
不明白楼主什么问题,难道是问循环体里能不能同时使用x和fi吗?
starytx 2013-12-25
  • 打赏
  • 举报
回复
你不是已经在使用了吗
max_min_ 2013-12-25
  • 打赏
  • 举报
回复
可以丢在循环外面初始化啊, 控制语言的话用|| 或者&& 连接 条件的话,可以放在循环体里面,也可以用, 隔开
Uron 2013-12-25
  • 打赏
  • 举报
回复
for(int i = 0, j = 0; i*j < 112; i++, j++){}
lm_whales 2013-12-25
  • 打赏
  • 举报
回复
这么做,你看如何:

//这里把条件设置的极为复杂,表示可以任意设置条件,当然循环最好能够退出,

//三个表达表达式,都是任意的
//只是用声明语句,做初始化语句,好象只能声明一个变量。

//这个需要看标准和编译器具体如何实现。

//不过,没有必要,追求那么完美;
//不必一定要在,循环内部,声明循环变量。
//
int combineCondition(UINT x,int x_max,float y,float ymax)
{

int t =rand()%4;
switch(t){
case 0:return x < xmax ;
case 1:return y < ymax;
case 2:return x < xmax && y< ymax;
case 3:return x < xmax || y< ymax;
return 0;
}
void test()
{
srand(time(NULL));
UINT x ;
float fi;
for( x = 1,fi = 0.1; //e1 初始化表达式,初始化某些变量 
    combineCondition(x,100,y,50.67); //e2 条件表达式;循环的执行条件,根据需要设置
    x++, fi += 0.01                  //e3 自增表达式;执行循环语句后,需要处理的事情。
    ){
     printf("x = %u,fi =%f",x,fi);  //循环语句 
}

}
AndyStevens 2013-12-24
  • 打赏
  • 举报
回复
逗号运算符

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧