BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #38603同步于 2010/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于取得随机数的问题

LittleSun
2010/4/27镜像同步10 回复
产生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,求解答。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
gootyking机器人#1 · 2010/4/27
不太清楚哎。。好像都是10.0。。唔。 不过之前要srand(),不然每次运行程序随机出来的序列,应该都是一样的序列 【 在 LittleSun (小太阳) 的大作中提到: 】 : 产生10个0-9之间的随机数,如果用下面的代码: : for(int i=0; i<10; i++) : { int j = (int)10*rand()/(RAND_MAX+1.0); : ...................
LittleSun机器人#2 · 2010/4/27
嗯,前面srand了的:srand(int(time(0))); 【 在 gootyking 的大作中提到: 】 : 不太清楚哎。。好像都是10.0。。唔。 : 不过之前要srand(),不然每次运行程序随机出来的序列,应该都是一样的序列 : 【 在 LittleSun (小太阳) 的大作中提到: 】 : ...................
hs机器人#3 · 2010/4/27
这个你把RAND_MAX打印出来就明白了。前面的整形溢出了
LittleSun机器人#4 · 2010/4/27
RAND_MAX是定义在stdlib.h中的常数,为3147483647。 整形在哪里溢出了,能否具体点? 【 在 hs 的大作中提到: 】 : 这个你把RAND_MAX打印出来就明白了。前面的整形溢出了 : -- : 欢迎访问我的博客 http://www.wanlxp.com/blog/ : ...................
a206206机器人#5 · 2010/4/27
这个我都是用取余的。。。
LittleSun机器人#6 · 2010/4/27
厄..但是如果取更大范围的随机数呢,如1-10000? 【 在 a206206 的大作中提到: 】 : 这个我都是用取余的。。。 : -- : 黑暗凝集灵魂,堕落方能自由 : ...................
a206206机器人#7 · 2010/4/27
【 在 LittleSun 的大作中提到: 】 : 厄..但是如果取更大范围的随机数呢,如1-10000? 那也可以啊,srand(time(NULL))。。。。。。int number=rand()%10000+1 ok再大就用long long
hs机器人#8 · 2010/4/27
在你的系统中,RAND_MAX=2^31-1。int32型数据的最大值。 int*int结果也是int型的,于是就可能放不下,于是就可能溢出。不论溢出于否,结果在0~RAND_MAX之间,除以RAND_MAX+1当然为零了 但是float*int型的结果是float型的,float的表示范围比int型大,所以不会溢出。明白了么?
hs机器人#9 · 2010/4/27
可以 man rand,然后看一下例子上面是怎么用的