C++ 在[0,1]之间生成随机值
我想生成一个介于0和1之间(不包括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)
。我搜索了很多,但找不到答案。我尝试了以下技巧,但它生成了一个负值
(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++
--为什么不使用
?