返回信息流产生10个0-9之间的随机数,如果用下面的代码:
for(int i=0; i<10; i++)
{ int j = (int)10*rand()/(RAND_MAX+1.0);
printf("%d ",j);
}
得到的10个j全是0。
而如果改成下面的:
int j = (int)10.0*rand()/(RAND_MAX+1.0);
就能得到正常的随机数。
为什么必须乘以10.0而不是整数10,求解答。
这是一条镜像帖。来源:北邮人论坛 / cpp / #38603同步于 2010/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于取得随机数的问题
LittleSun
2010/4/27镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不太清楚哎。。好像都是10.0。。唔。
不过之前要srand(),不然每次运行程序随机出来的序列,应该都是一样的序列
【 在 LittleSun (小太阳) 的大作中提到: 】
: 产生10个0-9之间的随机数,如果用下面的代码:
: for(int i=0; i<10; i++)
: { int j = (int)10*rand()/(RAND_MAX+1.0);
: ...................
嗯,前面srand了的:srand(int(time(0)));
【 在 gootyking 的大作中提到: 】
: 不太清楚哎。。好像都是10.0。。唔。
: 不过之前要srand(),不然每次运行程序随机出来的序列,应该都是一样的序列
: 【 在 LittleSun (小太阳) 的大作中提到: 】
: ...................
RAND_MAX是定义在stdlib.h中的常数,为3147483647。
整形在哪里溢出了,能否具体点?
【 在 hs 的大作中提到: 】
: 这个你把RAND_MAX打印出来就明白了。前面的整形溢出了
: --
: 欢迎访问我的博客 http://www.wanlxp.com/blog/
: ...................
厄..但是如果取更大范围的随机数呢,如1-10000?
【 在 a206206 的大作中提到: 】
: 这个我都是用取余的。。。
: --
: 黑暗凝集灵魂,堕落方能自由
: ...................
【 在 LittleSun 的大作中提到: 】
: 厄..但是如果取更大范围的随机数呢,如1-10000?
那也可以啊,srand(time(NULL))。。。。。。int number=rand()%10000+1
ok再大就用long long
在你的系统中,RAND_MAX=2^31-1。int32型数据的最大值。
int*int结果也是int型的,于是就可能放不下,于是就可能溢出。不论溢出于否,结果在0~RAND_MAX之间,除以RAND_MAX+1当然为零了
但是float*int型的结果是float型的,float的表示范围比int型大,所以不会溢出。明白了么?