我需要帮助知道如何使用rand_r()生成介于-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;