Подтвердить что ты не робот

Случайный положительный или отрицательный номер JavaScript

Мне нужно создать случайный -1 или 1, чтобы умножить уже существующее число. Проблема - моя текущая случайная функция генерирует -1, 0 или 1. Каков наиболее эффективный способ сделать это?

4b9b3361

Ответ 1

Не используйте существующую функцию - просто вызовите Math.random(). Если < 0,5, затем -1, иначе 1:

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

Ответ 2

Я всегда был поклонником

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

поскольку это просто имеет смысл.

  • Math.round(Math.random()) даст вам 0 или 1

  • Умножение результата на 2 даст вам 0 или 2

  • И затем вычитание 1 дает вам -1 или 1.

Интуитивный!

Ответ 3

Просто для удовольствия:

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

или

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

Но используйте то, что, по вашему мнению, будет поддерживаемым.

Ответ 4

Есть действительно много способов сделать это, как показывают предыдущие ответы.

Самая быстрая комбинация Math.round() и Math.random:

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

Вы также можете использовать Math.cos() (который также быстро):

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

Ответ 5

почему вы не пытаетесь:

(Math.random() - 0.5) * 2

50% вероятность иметь отрицательное значение с добавленным преимуществом, все еще имея генерируемое случайное число.

Или если действительно нужен -1/1:

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