53 votes

JavaScript Nombre Aléatoire Positif ou Négatif

J'ai besoin de créer un nombre aléatoire -1 ou 1 pour multiplier un nombre déjà existant. Le problème est que ma fonction aléatoire actuelle génère un -1, 0 ou 1. Quel est le moyen le plus efficace de le faire ?

145voto

ziesemer Points 15594

N'utilisez pas votre fonction existante - appelez simplement Math.random(). Si < 0.5 alors -1, sinon 1 :

var plusOuMoins = Math.random() < 0.5 ? -1 : 1;

La méthode Math.random() renvoie un nombre à virgule flottante supérieur ou égal à 0 et inférieur à 1.

72voto

majman Points 606

J'ai toujours été fan de

Math.round(Math.random()) * 2 - 1

car ça a tout simplement du sens.

  • Math.round(Math.random()) vous donnera 0 ou 1

  • Multiplier le résultat par 2 vous donnera 0 ou 2

  • Et ensuite soustraire 1 vous donnera -1 ou 1.

Intuitif!

15voto

newe1344 Points 195

Pourquoi ne pas essayer:

(Math.random() - 0.5) * 2

50% de chances d'obtenir une valeur négative avec l'avantage supplémentaire d'obtenir toujours un nombre aléatoire.

Ou si vous avez vraiment besoin d'un -1/1:

Math.ceil((Math.random() - 0.5) * 2) < 1 ? -1 : 1;

11voto

RobG Points 41170

Juste pour le fun:

var plusOuMoins = [-1,1][Math.random()*2|0];  

ou

var plusOuMoins = Math.random()*2|0 || -1;

Mais utilisez ce que vous pensez être maintenable.

4voto

Nabil Kadimi Points 2109

Il existe vraiment de nombreuses façons de le faire comme le montrent les réponses précédentes.

La plus rapide est la combinaison de Math.round() et Math.random:

// random_sign = -1 + 2 x (0 ou 1); 
random_sign = -1 + Math.round(Math.random()) * 2;   

Vous pouvez également utiliser Math.cos() (qui est également rapide):

// cos(0) = 1
// cos(PI) = -1
// random_sign = cos( PI x ( 0 ou 1 ) );
random_sign = Math.cos( Math.PI * Math.round( Math.random() ) );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X