2010-11-17 9 views
0

J'ai examiné comment générer deux nombres aléatoires avec rand()% n (où n est le nombre total d'échantillons), mais ils semblent généralement avoir un biais.Générer deux nombres aléatoires pour l'échantillonnage RANSAC

Existe-t-il une meilleure façon (et de préférence la plus simple) de générer des nombres aléatoires entre 0 et n (nombre d'échantillons)?

n est lu à partir d'un fichier contenant une liste de points de données. L'objectif est de faire une ligne d'ajustement à travers les données en utilisant RANSAC.

+0

Comme Akku mentionné rand() a quelques problèmes. Quel système d'exploitation êtes-vous? Il y a certains OS qui ont de meilleurs PRNG que rand. –

+0

Aussi, quelle est l'importance du biais, et pour quelles valeurs de n observez-vous ce biais? –

+0

Je suis sur OS X. Je ne sais pas à quel point le biais était significatif - sauf qu'il ne cessait de répéter les nombres près de l'extrémité supérieure, c'est-à-dire que si n était de 10, les nombres étaient plus grands que 5 plus souvent. – saad

Répondre

1

rand() % n utilise seulement les bits faibles du nombre aléatoire lorsque n est significativement plus petit que RAND_MAX. Il est préférable d'utiliser tous les bits, par ex. en divisant par RAND_MAX pour obtenir un nombre (en virgule flottante) compris entre 0,0 et 1,0, puis en multipliant par n et en revenant à un nombre entier.

Il est également possible que l'implémentation de rand() ne soit simplement pas suffisante pour certaines utilisations. Dans ce cas, utilisez un autre générateur de nombres aléatoires (par exemple Mersenne Twister).

+0

Sauf pour la première phrase, c'est une bonne réponse. Votre première phrase n'est vraie que lorsque «n» est la puissance de 2. Ce qui peut être parfois. –