La cueillette de nombre aléatoire entre deux points de C
Je me demandais, est-il possible de générer un nombre aléatoire entre deux valeurs dans c. I. e. mon programme est défini comme ceci:
function x
{
generate random number;
}
while(1)
{
function x;
delay
}
donc bascially je veux un nombre aléatoire sera généré à chaque fois que la fonction est appelée , mais le nombre doit être compris entre, par exemple, 100 et 800
Je sais qu'il n'est déjà fait appel de fonction aléatoire et randmize dans stdlib.h
Je juste ne sais pas comment créer les limites supérieure et inférieure
Merci
OriginalL'auteur user1175889 | 2012-03-05
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, n'oubliez pas de graine, votre PRNG une fois et une seule fois:
Ensuite, cette fonction devrait faire ce que vous voulez.
(légèrement testé, semble fonctionner)
Dans votre cas, vous aurez envie de:
Il utilise l'arithmétique à virgule flottante, ce qui peut être plus lent que le modulo (%) de l'arithmétique, mais ont moins de préjugés.
Ce que c'est que j'ai un while (1) (super boucle) qui appelle une fonction toutes les 10 ms secondes.
Si vous voulez un nombre aléatoire, vous devez utiliser rand(), ou écrire votre propre GÉNÉRATEUR.
OriginalL'auteur abelenky
De la première à obtenir un nombre aléatoire entre 0 et 1 (
R
). Ensuite, à l'échelle de ce que la gamme désirée (R* (right limit - left limit)
). Puis ajouter le min valeur souhaitée.OriginalL'auteur perreal
Regarder le module opérateur.
700 est la différence de la gamme.
Si oui, je crois que le générateur devrait déjà avoir été partial et de mauvaise. Que faire de cette situation pire est bonne ou mauvaise, est discutable dans la mesure où l'empirer augmente la probabilité de découverte et d'amélioration.
a une meilleure réponse. J'ai posté un pour plus de clarté. Je ne sais pas comment le poster a l'intention d'utiliser la réponse. Assez bon peut être assez bon.
Le générateur peut être PARFAIT, et modulo encore crée un biais. Considérons le cas très simple où RAND_MAX = 10, et de vous faire un modulo 3. Avec une parfaite distribution, vous aurez 40% de Zéros, 40%, et 30% seulement à Deux, ergo: Biais à l'encontre de Deux(2) dans ce cas simple. Le parti pris est de plus en plus difficile avec un Grand nombre, mais il est toujours là.
Oui, mon erreur. J'avoue que je m'inquiète de l'algorithme plus moi-même. Si j'avais la possibilité de définir la rand_max, je ne serais pas à l'aide de mod; et la normale RAND_MAX est spec'd: "Cette valeur est dépendants de la bibliothèque, mais est accordé à être au moins 32767.'
OriginalL'auteur bbarnhart