2011-05-07 3 views
1

Si je reçois un nombre aléatoire, comment puis-je augmenter mes chances de rendre ce nombre aléatoire égal. Je ne cherche pas à le faire même à chaque fois. Je cherche juste à générer un nombre aléatoire disons ...% 70 du temps ou% 90 du temps.augmenter les chances de nombre pair

private function randNum (high, low) { 
     return Math.floor(Math.random() * (1+high-low)) + low; 
    } 

Est-ce que je passe une plus grande plage de numéros à cette fonction? Ou devrais-je abandonner complètement cette fonction?

Merci

Répondre

4
private function randNum (high : Number, low : Number) : int 
{ 
    var even : Boolean = Math.random() < 0.7; //set probability of even number here 
    var rand : int = Math.floor(Math.random() * (1+high-low)) + low; 
    if (even) 
     while (rand % 2 != 0) 
      rand = Math.floor(Math.random() * (1+high-low)) + low; 
    else 
     while (rand % 2 != 1) 
      rand = Math.floor(Math.random() * (1+high-low)) + low; 
    return rand; 
} 

Test:

var even : int = 0; 
var odd : int = 0; 
for (var i : int = 0; i < 100000; i++) 
{ 
    var a : int = randNum(1, 20); 
    if (a % 2 == 0) 
     even++; 
    else 
     odd++; 
} 
trace(even, odd); 

Sortie:

[trace] 69869 30131 
+0

Brillant Timofei, Merci une beaucoup, c'est parfait. –

+3

+1, car cela fonctionne, mais vous pourriez vous retrouver avec une boucle infinie si votre plage ne contient aucun nombre pair (ou aucun nombre impair). Deuxièmement, il n'y a vraiment pas besoin d'une boucle. Par exemple, pour les nombres compris entre 1 et 10, pour les nombres impairs, choisissez rand (1,5) et return 2 * n-1, et pour les nombres pairs, choisissez rand (1,5) et return 2 * n. Vous devez juste vous assurer d'ajuster les plages de manière appropriée. –

2

Un peu trop tard), mais un autre sans boucle et en utilisant l'opération de masquage de bits:

fera votre numéro même, puis selon le résultat de (Math.random() >= evenProbability) vous définissez le bit inférieur à 1 pour donner un nombre impair

function randomRange(low:int, high:int, evenProbability:Number = 0.5):int{ 
    var ret:int = int(Math.random() * (1 + high - low)) + low 
    return (ret & -2) | int(Math.random() >= evenProbability) 
} 

Voici un test en temps réel avec wonderfl: http://wonderfl.net/c/9IHx

Questions connexes