C++ 在[0,1]之间生成随机值

C++ 在[0,1]之间生成随机值,c++,c,random,C++,C,Random,我想生成一个介于0和1之间(不包括1)的随机浮点值,即[0,1)。我搜索了很多,但找不到答案。我尝试了以下技巧,但它生成了一个负值 (double)rand()/(double)RAND_MAX-1; 只需除以RAND_MAX,包括+1。如下所示: (double)rand()/((double)RAND_MAX+1); 只需除以RAND_MAX,包括+1。如下所示: (double)rand()/((double)RAND_MAX+1); 您需要括号来强制执行正确的顺序: (double

我想生成一个介于0和1之间(不包括1)的随机浮点值,即
[0,1)
。我搜索了很多,但找不到答案。我尝试了以下技巧,但它生成了一个负值

(double)rand()/(double)RAND_MAX-1;

只需除以RAND_MAX,包括+1。如下所示:

(double)rand()/((double)RAND_MAX+1);

只需除以RAND_MAX,包括+1。如下所示:

(double)rand()/((double)RAND_MAX+1);

您需要括号来强制执行正确的顺序:

(double)rand()/((double)RAND_MAX + 1);

还要注意,您需要+1,而不是-1。

您需要括号来强制执行正确的顺序:

(double)rand()/((double)RAND_MAX + 1);

还请注意,您需要+1,而不是-1。

不太需要。这将生成小于零的数字。这将生成负值,就像我遗漏了一个“(”。修复谢谢。我在1000个元素的循环中尝试了它,它显示的值都小于1。这还不够(1000)。此表达式可以生成1和另一个大于1的值,即
(double)RAND_MAX/(RAND_MAX-1)
不完全正确。这将生成小于零的数字。这将生成负值,就像我遗漏了一个“(”。修复谢谢。我在1000个元素的循环中尝试了它,它显示的值都小于1。这还不够(1000)。此表达式可以生成1和另一个大于1的值,即
(double)RAND_MAX/(RAND_MAX-1)
是正确答案,尽管您可以删除其中一个强制转换。如果
RAND_MAX
为64位,
((双)RAND_MAX+1)
不会增加1。这是正确答案,尽管您可以删除其中一个强制转换。如果
RAND_MAX
为64位,
((双)RAND_MAX+1)
不会增加1。您将其标记为
C++
--为什么不使用
?您将其标记为
C++
--为什么不使用