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?
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;
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!
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;
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.
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() ) );
我正在使用underscore.js 随机播放
var plusOrMinus = _.shuffle([-1, 1])[0];
多年以后,让我说一下显而易见的;
Math.sign(Math.random()-0.5);
Math.random() - Math.random()
或Math.random() * (Math.random() > 0.5 ? 1 : -1 )
给你
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.