标题:[讨论]有关rand()生成数的大小..
只看楼主
可见光
Rank: 1
等 级:新手上路
帖 子:143
专家分:0
注 册:2007-6-15
 问题点数:0 回复次数:17 
[讨论]有关rand()生成数的大小..
我想生成32bits的随机数...现在想知道rand()最大能生成多少bits的随机数
搜索更多相关主题的帖子: rand 成数 
2007-11-01 20:02
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
当然是32位可以表示的最大数.

倚天照海花无数,流水高山心自知。
2007-11-01 20:06
可见光
Rank: 1
等 级:新手上路
帖 子:143
专家分:0
注 册:2007-6-15
得分:0 

可是经过反复测试,是生成的16位的随机数..
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include "conio.h"
void generate(unsigned int *R)
{
int i;;
time_t t;
srand((unsigned) time(&t));
printf("Ten random numbers:\n");
for(i=0; i<32; i++)
{
R[i]=rand()*rand();
printf("%x\n", R[i]);
}
}

int main(void)
{
unsigned int *R;R=new unsigned int[32];
generate(R);

getch();
return 0;
}
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include "conio.h"
void generate(unsigned int *R)
{
int i;;
time_t t;
srand((unsigned) time(&t));
printf("Ten random numbers:\n");
for(i=0; i<32; i++)
{
R[i]=rand()*rand();
printf("%x\n", R[i]);
}
}

int main(void)
{
unsigned int *R;R=new unsigned int[32];
generate(R);

getch();
return 0;
}
Ten random numbers:
89d9ea0
107eb108
12af1c0
1e3488ac
5e86a7f
72acb6f
1a5928a
317f883
47d81e4
3a6d988
11f9e460
20ba7cc
30f778da
1d0dcaf8
f54d434
6f70c74
d06eb7e
28d82fa9
1fd1db8d
19035106
d4623e0
2be5805
1beded80
95350a7
20727cbe
34090086
2e1ea8d8
8cc425
225505e7
20806e0
24b2dbb6
e6f8c10
这个结果是rand()*rand()得到的
下面是rand()得到:
Ten random numbers:
5eb4
2629
412e
5861
64b1
69fc
3b9c
41a7
2070
4c46
5f5f
54b7
5176
4ad0
3e30
7b36
1e66
6fb
73fd
2129
43bd
9a4
6b3c
3800
1abf
7e4a
3b7f
6ad3
cb2
2973
5648
67eb
谁能给我解释下

2007-11-01 20:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
我的意思其实随机数的最大值肯定是你机器和编译器决定的位数.
和定义的一般变量的范围一样.(应该是和int相同吧).

倚天照海花无数,流水高山心自知。
2007-11-01 22:38
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
得分:0 

楼主看看rand()的返回类型就知道了.

rand()返回值就是一个随机的,楼主怎么可能要rand()返回一个一定达到32bit的数.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-02 00:36
可见光
Rank: 1
等 级:新手上路
帖 子:143
专家分:0
注 册:2007-6-15
得分:0 
我还是不明白啊...我的意思是生成的最大的数是32bits就可以...
我用rand()返回的那一组数,最大的是16位的啊。。我怎么考虑都最大的应该是32位的啊。。我在不同的机子上运行,都是最大16位的。。。谁能给我说说为甚么啊
2007-11-03 17:34
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
[0,RAND_MAX]
2007-11-03 21:35
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 

如果想要 unsigned int 可以自己升级它们。
R[i] = (unsigned int)intrand() * (unsigned int)rand();

for(i=0; i<32; i++)
{
R[i] = (unsigned int)intrand() * (unsigned int)rand();
printf("%x\n", R[i]);
}

//-------------------------------------------------//

若这样还不行,那就>>>
unsigned int ra1;
unsigned int ra2;
..........

for(i=0; i<32; i++)
{
ra1 = rand();
ra2 = rand();
R[i] = ra1 * ra2;
printf("%x\n", R[i]);
}

这个所有编译器都能很好的处理。


—>〉Sun〈<—
2007-11-03 22:04
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
以下是引用cosdos在2007-11-3 22:04:32的发言:

如果想要 unsigned int 可以自己升级它们。
R[i] = (unsigned int)intrand() * (unsigned int)rand();

for(i=0; i<32; i++)
{
R[i] = (unsigned int)intrand() * (unsigned int)rand();
printf("%x\n", R[i]);
}

//-------------------------------------------------//

若这样还不行,那就>>>
unsigned int ra1;
unsigned int ra2;
..........

for(i=0; i<32; i++)
{
ra1 = rand();
ra2 = rand();
R[i] = ra1 * ra2;
printf("%x\n", R[i]);
}

这个所有编译器都能很好的处理。

楼主需要的是32位的随机数,而不是32个随机数,不知道楼上何出此CODE。
另外,随机变量X,Y均在[0,RAND_MAX]上服从均匀分布,X*Y的分布情况如何呢?是在[0,RAND_MAX*RAND_MAX]服从均匀分布吗?
如果是的话如何证明呢?
如果不是的话,这种做法是否欠妥呢

2007-11-03 23:01
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
又想了想我上面的问法有些错误,X,Y都是离散型随机变量,不是服从均匀分布。
而X*Y的分布没有必要讨论了。
如果按照cosdos的做法,(RAND_MAX,RAND_MAX*RAND_MAX]之间的质数被随机到的可能性是0,原因很简单一个质数不可能被分解成两个数的乘积的形式,所以这种做法确实是欠妥的。
2007-11-03 23:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-182662-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029793 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved