Concept of Math.floor(Math.random() * 5 + 1), what is the true range and why?
javascript, math
Solution
From the Mozilla Developer Networks' documentation on `Math.random()`:
The Math.random() function returns a floating-point, pseudo-random number in the range [0, 1) that is, from 0 (inclusive) up to but not including 1 (exclusive).
Here are two example randomly generated numbers:
Math.random() // 0.011153860716149211
Math.random() // 0.9729151880834252
Because of this, when we multiply our randomly generated number by another number, it will range from 0 to a maximum of 1 lower than the number being multiplied by (as `Math.floor()` simply removes the decimal places rather than rounding the number (that is to say, 0.999 becomes 0 when processed with `Math.floor()`, not 1)).
Math.floor(0.011153860716149211 * 5) // 0
Math.floor(0.9729151880834252 * 5) // 4
Adding one simply offsets this to the value you're after:
Math.floor(0.011153860716149211 * 5) + 1 // 1
Math.floor(0.9729151880834252 * 5) + 1 // 5
Problem
By multiplying the random number (which is between 0 and 1) by 5, we make it a random number between 0 and 5 (for example, 3.1841). Math.floor() rounds this number down to a whole number, and adding 1 at the end changes the range from between 0 and 4 to between 1 and 5 (up to and including 5). The explanation above confused me... my interpretation below: --adding the 5 gives it a range of 5 numbers --but it starts with 0 (like an array?) --so it's technically 0 - 4 --and by adding the one, you make it 1 - 5 I am very new to JS, don't even know if this kind of question is appropriate here, but this site has been great so far. Thank you for any help!