2011-12-23 22 views

Respuesta

92

No utilice su función existente - simplemente llame al Math.random(). Si < 0,5 a continuación, -1, 1 cosa:

var plusOrMinus = Math.random() < 0.5 ? -1 : 1; 
+4

funciona perfectamente, divertido no pude encontrar una respuesta en cualquier lugar en línea. –

+1

Buena solución elegante, gracias –

9

Sólo por el gusto de hacerlo:

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

o

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

pero el uso de lo que se cree que será fácil de mantener.

+1

Por un lado, debo decir que hay algo que decir acerca de la legibilidad. Por otro lado, felicitaciones por quitarme 3 caracteres de mi respuesta (aunque podría argumentar que los 3 personajes son espacios en blanco innecesarios). El mío tiene 1 carácter más corto si también eliminas el '0' de '0.5'. :-) – ziesemer

+0

Sí, solo por diversión. :-) – RobG

+0

que es un pedazo de código! – egidiocs

35

Siempre he sido un fan de

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

, ya que sólo una especie de sentido.

  • Math.round(Math.random()) le dará 0 o 1

  • multiplicando el resultado por 2 le dará 0 o 2

  • y luego restando 1 le da -1 o 1.

¡Intuitivo!

+0

@RobG - tiene razón, señor – majman

+0

En mi opinión, este es un mejor creador "aleatorio" - o +. La respuesta seleccionada simplemente no funciona para mí porque, ¿qué sucede si quiero un número que sea menor que 4 y que no sea negativo? Esta es solo una mejor solución. – Brendan

3

Hay muchas maneras de hacerlo como muestran las respuestas anteriores.

El ser más rápida combinación de Math.round() y Math.random:

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

También puede utilizar Math.cos() (which is also fast):

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

¿Por qué no intenta :

(Math.random() - 0.5) * 2 

50% de posibilidades de tener un valor negativo con el beneficio adicional de tener un número al azar ber genera.

O si realmente necesita un -1/1:

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