2010-11-17 20 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