2010-11-17 4 views
0

Я рассмотрел, как сгенерировать два случайных ints с rand()% n (где n - общее количество выборок), но они, как правило, имеют смещение.Создайте два случайных числа для выборки RANSAC

Есть ли лучший (и желательно более простой) способ генерации случайных чисел между 0 и n (количество выборок)?

n считывается из файла, который содержит список точек данных. Цель состоит в том, чтобы выполнить установку линии через данные с помощью RANSAC.

+0

Как заметил Akku, у rand() есть некоторые проблемы. На какой ОС вы работаете? Есть некоторые ОС, у которых лучше PRNG, чем у rand. –

+0

Кроме того, насколько значительным является смещение, и для каких значений n вы наблюдаете это смещение? –

+0

Я нахожусь в OS X. Я не знаю, насколько значительным является предвзятое отношение - за исключением того, что он повторял числа вблизи верхнего конца, т. Е. Если n было 10, он бы поставил числа больше, чем пять. – saad

ответ

1

rand() % n использует только младшие разряды случайного числа, когда n значительно меньше, чем RAND_MAX. Лучше использовать все биты, например. путем деления на RAND_MAX, чтобы получить число с плавающей запятой между 0.0 и 1.0 и затем умножить на n и преобразовать обратно в целое число.

Возможно также, что реализация rand() просто не подходит для некоторых целей. В этом случае вообще используйте генератор случайных чисел (например, Mersenne Twister).

+0

За исключением первого предложения, это хороший ответ. Ваше первое предложение верно только тогда, когда 'n' является силой 2. Которое может быть иногда. –

Смежные вопросы