s**b 发帖数: 169 | 1 我用srand()和rand()产生出来的随机数每次都是一样的。
大家是怎么解决的? |
E*V 发帖数: 17544 | 2 seed?
【在 s**b 的大作中提到】 : 我用srand()和rand()产生出来的随机数每次都是一样的。 : 大家是怎么解决的?
|
s***t 发帖数: 195 | 3 that's how pseudo-random number generator works. change seed using
system clock before generate the first random number.
【在 s**b 的大作中提到】 : 我用srand()和rand()产生出来的随机数每次都是一样的。 : 大家是怎么解决的?
|
s**b 发帖数: 169 | 4 不小心把test.c删除了,心痛阿。。。
以下是我的部分code
============================
MPI_Init();
MPI_comm_rank(&rank);
MPI_comm_size(&tasks);
srand(time(NULL));
number=rand()/(MAX_RAND+1);
...
===========================
用seed的话是不是把time(NULL)删掉换成一个指定的数字?
【在 s***t 的大作中提到】 : that's how pseudo-random number generator works. change seed using : system clock before generate the first random number.
|
s***t 发帖数: 195 | 5 not very familier with MPI. but seems you are already setting the seed.
but usually there's a range for the seed. you should do a mod on the time.
【在 s**b 的大作中提到】 : 不小心把test.c删除了,心痛阿。。。 : 以下是我的部分code : ============================ : MPI_Init(); : MPI_comm_rank(&rank); : MPI_comm_size(&tasks); : srand(time(NULL)); : number=rand()/(MAX_RAND+1); : ... : ===========================
|
s**b 发帖数: 169 | 6 我用的在个人电脑上没问题,但是想移植用MPI。
【在 s***t 的大作中提到】 : not very familier with MPI. but seems you are already setting the seed. : but usually there's a range for the seed. you should do a mod on the time.
|
s**b 发帖数: 169 | 7 我现在用seed=rank,rank是进程号,这样产生出来的随机性好不好?
【在 E*V 的大作中提到】 : seed?
|
E*V 发帖数: 17544 | 8 这个随机性好不好是靠rand()的算法,
seed的作用,我的理解就是从一个序列的某个位置开始数下去。
【在 s**b 的大作中提到】 : 我现在用seed=rank,rank是进程号,这样产生出来的随机性好不好?
|
s**i 发帖数: 381 | 9 it is better to multiply a large number to rank as the seed
Many random generators will generate similar sequences from close seeds.
【在 s**b 的大作中提到】 : 我现在用seed=rank,rank是进程号,这样产生出来的随机性好不好?
|
s**b 发帖数: 169 | 10 3x a lot!
【在 s**i 的大作中提到】 : it is better to multiply a large number to rank as the seed : Many random generators will generate similar sequences from close seeds.
|
y***d 发帖数: 2330 | 11 如果是 linux(unix?) 系统的话,可以使用 /dev/random 或者 /dev/urandom,从这两
个文件里面读取 seed。两个文件的差异你可以 google
int
getRandInt()
{
int fd;
int num = time(NULL) + getpid() * 100;
fd = open("/dev/random", O_RDONLY);
if (fd >= 0) {
read(fd, &num, sizeof (num));
close(fd);
}
return num;
}
srand(getRandInt());
【在 s**b 的大作中提到】 : 我现在用seed=rank,rank是进程号,这样产生出来的随机性好不好?
|
s**b 发帖数: 169 | 12 let me try to understand your code first,hehe.
Your help is greatly appreciated!
【在 y***d 的大作中提到】 : 如果是 linux(unix?) 系统的话,可以使用 /dev/random 或者 /dev/urandom,从这两 : 个文件里面读取 seed。两个文件的差异你可以 google : int : getRandInt() : { : int fd; : int num = time(NULL) + getpid() * 100; : fd = open("/dev/random", O_RDONLY); : if (fd >= 0) { : read(fd, &num, sizeof (num));
|