Rob Cable Rob Cable - 2 months ago 6
Javascript Question

Explanation of Code: Dealing with min and max - Javascript

function randomRange(myMin, myMax) {

return Math.floor(Math.random() * (myMax - myMin + 1)) +myMin;

}


I need a refresher on what the return statement is doing. I understand it creates a range for instance, 5 - 15. But I don't get why im subtracting the max from the min and adding + 1 and then +myMin.

Answer

But I don't get why im subtracting the max from the min and adding + 1 and then +myMin.

First remember that Math.random() returns a value in the range of [0, 1).

Lets start from the end:

  • + myMin is done to ensure that the result is larger or equal to myMin. Lets assume Math.random() returns 0. Then Math.floor(...) returns 0. If we didn't + myMin, return result would be 0 instead of myMin.

  • + 1 is done to get random values that include myMax. Remember that Math.random() never returns 1, only values close to 1. I.e. the Math.floor(Math.random() * myMax) can never be myMax unless we add 1.

  • myMax - myMin is done because we do + myMin above. We have to account for increasing the result by myMin.

    Lets assume Math.random() returns 0.5 and our range is 100 - 120. Without - myMin, we would get

     Math.floor(0.5 * 120) + 100 = 60 + 100 = 160
    

    That's clearly larger than 120. If we include - myMin:

     Math.floor(0.5 * (120 - 100)) + 100 = (0.5 * 20) + 100 = 110
    

    we get 110 which is exactly in the middle of our range (which makes sense intuitively since we get 0.5 as a random value).

Comments