如何使用rand_r生成介于-1和1之间的随机数

时间:2017-03-26 02:38:02

标签: c pthreads

我需要帮助知道如何使用rand_r()生成介于-1和1之间的随机数。我没有在网上寻找有关如何做到这一点的例子。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

每次调用rand_r时,都会传递状态变量的地址。在第一次调用rand_r之前,应该为此状态变量分配一个种子值。您还需要为每个线程保留一个单独的状态变量,以便它们各自具有自己的状态。

unsigned int myseed = time(NULL) ^ getpid() ^ pthread_self();
...
int rand1 = rand_r(&myseed);
...
int rand2 = rand_r(&myseed);

要获得-1到1之间的值,首先将给定的随机值(强制转换为double)除以RAND_MAX。这将给出一个介于0和1之间的值。然后乘以数字的范围(即1 - (-1)= 2)并添加下限(-1):

double rand = ((double)rand_r(&myseed) / RAND_MAX) * 2 - 1;