JavaScript Random Positive or Negative Number

后端 未结 6 1847
孤独总比滥情好
孤独总比滥情好 2021-01-30 06:32

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

相关标签:
6条回答
  • 2021-01-30 07:14

    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!

    0 讨论(0)
  • 2021-01-30 07:16

    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.

    0 讨论(0)
  • 2021-01-30 07:18

    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() ) );
    
    0 讨论(0)
  • 2021-01-30 07:19

    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;
    
    0 讨论(0)
  • 2021-01-30 07:22

    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;
    
    0 讨论(0)
  • 2021-01-30 07:30

    I'm using underscore.js shuffle

    var plusOrMinus = _.shuffle([-1, 1])[0];
    
    0 讨论(0)
提交回复
热议问题