我需要有关如何使用rand_r()生成介于-1和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;