在0和1之间生成随机数

4

这是一个简单的问题,但对我来说却很困难。我想要生成均匀分布的随机数,范围在 0 到 1 之间,该怎么做呢?在 Matlab 中,我使用 rand 函数,在 C++ 中,rand() 返回整数。


1
可能是C++随机浮点数生成的重复问题。 - Shafik Yaghmour
3个回答

11

1
这取决于您需要多么随机的数字。通常,如果我不在意随机性,我会使用rand并除以MAX_RAND(我打赌matlab的rand比c的rand更好)。
然而,我所做的大部分工作都需要比c函数rand更好的随机数生成器,并且我不需要它是加密安全的。在这种情况下,我使用mersenne twister类(http://www.bedaux.net/mtrand/),这似乎对我有用于模拟退火和蒙特卡罗模拟。
此外,使用此类别,可以获取一个随机int32和一个随机double(介于0和1之间)。

1
也许您可以使用RAND_MAX常量来将随机生成的整数进行除法运算。

记得将其转换为double / float! rand() / (float)RAND_MAX - AStupidNoob
啊,非常快的捕获 :) 使我的答案不会无用。 - miushock
1
通常需要的数字范围是 [0,1) 而不是 [0,1],这种情况下可以除以 (RAND_MAX+1.0) - pjs
1
请注意,我说的是 +1.0,而不是 +1 - pjs
1
@pio 在C++中实现这个功能,将转换为浮点数以获得0到1之间的统一性似乎是一个合理的地方。 - pjs
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接