gpt4 book ai didi

c - 如何使用 POSIX 上的线程生成 [0,1] 之间的随机数

转载 作者:行者123 更新时间:2023-11-30 20:56:18 25 4
gpt4 key购买 nike

我想使用 POSIX 上的线程生成数百万个 0 到 1 之间的随机数(包括 0 和 1)。我尝试了两个代码,但它仍然给我错误的结果,它生成大的有符号数字。

代码(1):

srand(time(NULL));
for (i = 0; i < 10; i++)
{
double r = (double)(rand()%1001)/1000;
printf("Random double, 0 to 1: %f\n",r);
}

代码(2):

srand(time(NULL));
for (i = 0; i < 10; i++)
{
double r = rand()/(double)RAND_MAX;
printf("Random double, 0 to 1: %f\n",r);
}

生成的结果如下:

12451421454

-4514251445

96541213212

-56543214521

那么解决方案是什么,,,,请

最佳答案

对! pi 的计算值不精确。

如果你有 30 分钟的时间,请看这个 video关于随机数的生成。或者这个问题C++ random float number generation .

x=(double)(rand()%1001)/1000;不是生成 0 到 1 之间的随机数的正确方法...自 RAND_MAX%1001!=0 以来,只有 1000 个可能的值,并且有些值比其他值更有可能! x = rand()/(double)RAND_MAX;效果更好。

此外,请记住中心极限定理:错误类似于 1/sqrt(total) : 你永远不会得到 10 位数字。尝试增加total .

sqrt(x*x+y*y)<1成本高昂:(x*x+y*y)<1就足够了。

最后,尝试 random C++11 的。

srand(time(NULL));如果您计划使用许多线程,可能会造成麻烦:time(NULL)每秒只改变一次,并且许多线程将获得相同的值。将种子发送到线程或使用 random_device为您的随机生成器播种。

关于c - 如何使用 POSIX 上的线程生成 [0,1] 之间的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26448760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com