2010-11-17 45 views
0

我已经看过如何用rand()%n(其中n是样本总数)生成两个随机整数,但它们似乎通常有偏差。生成RANSAC抽样的两个随机数

是否有更好的(并且最好更简单)的方法来生成0到n之间的随机数(样本数)?

从包含数据点列表的文件中读取n。目标是使用RANSAC对数据进行线拟合。

+0

由于Akku提到兰特()有一些问题。你在什么操作系统上?有一些操作系统的PRNG比rand好。 – 2010-11-17 11:56:21

+0

另外,偏差有多大,你观察到这个偏差的n值是多少? – 2010-11-17 13:42:07

+0

我在OS X上。我不知道这个偏差有多大 - 除了它一直在重复接近上端的数字,即如果n是10,它会使数字大于5。 – saad 2010-11-18 08:49:02

回答

1

rand() % nn明显小于RAND_MAX时,仅使用随机数的低位。最好使用所有的比特,例如通过除以RAND_MAX得到0.0和1.0之间的(浮点)数,然后乘以 n并转换回整数。

对于某些用途,rand()的实现也可能不够好。在这种情况下,一起使用另一个随机数发生器(例如Mersenne Twister)。

+0

除了第一句话,这是一个很好的答案。你的第一句话只有当'n'是2的幂时才是真的。它有时可能是。 – 2010-11-17 13:41:15