我需要有关如何使用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;

10-08 06:38