JavaScript Random Positive or Negative Number

JavascriptRandom

Javascript Problem Overview


I need to create a random -1 or 1 to multiply an already existing number by. Issue is my current random function generates a -1, 0, or 1. What is the most efficient way of doing this?

Javascript Solutions


Solution 1 - Javascript

Don't use your existing function - just call Math.random(). If < 0.5 then -1, else 1:

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

Solution 2 - Javascript

I've always been a fan of

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

as it just sort of makes sense.

  • Math.round(Math.random()) will give you 0 or 1

  • Multiplying the result by 2 will give you 0 or 2

  • And then subtracting 1 gives you -1 or 1.

Intuitive!

Solution 3 - Javascript

why dont you try:

(Math.random() - 0.5) * 2

50% chance of having a negative value with the added benefit of still having a random number generated.

Or if really need a -1/1:

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

Solution 4 - Javascript

Just for the fun of it:

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

or

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

But use what you think will be maintainable.

Solution 5 - Javascript

There are really lots of ways to do it as previous answers show.

The fastest being combination of Math.round() and Math.random:

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

You can also use 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() ) );

Solution 6 - Javascript

I'm using underscore.js shuffle

var plusOrMinus = _.shuffle([-1, 1])[0];

Solution 7 - Javascript

After ages, just let me state the obvious;

Math.sign(Math.random()-0.5);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAsh BlueView Question on Stackoverflow
Solution 1 - JavascriptziesemerView Answer on Stackoverflow
Solution 2 - JavascriptmajmanView Answer on Stackoverflow
Solution 3 - JavascriptnewshortsView Answer on Stackoverflow
Solution 4 - JavascriptRobGView Answer on Stackoverflow
Solution 5 - JavascriptNabil KadimiView Answer on Stackoverflow
Solution 6 - JavascriptAdam SchultzView Answer on Stackoverflow
Solution 7 - JavascriptReduView Answer on Stackoverflow