Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Concept of Math.floor(Math.random() * 5 + 1), what is the true range and why?

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!

like image 931
alex.mo.07 Avatar asked Jan 31 '14 15:01

alex.mo.07


People also ask

What is the range of math random?

The Math. random() function returns a floating-point, pseudo-random number in the range 0 to less than 1 (inclusive of 0, but not 1) with approximately uniform distribution over that range — which you can then scale to your desired range.

What does math random () * 100 do?

random returns with 100 will result in a max value of 99.999.... and when cast to an int turns to 99. Since the randomly generated number is supposed to include 100 you'll have to multiply with 101. Multiplying with 100 will result in a max int value of 99.

How does math Floor math random work?

random generates a number between 0 and 1, that isn't a whole number, and also isn't 1. To get a number, for example between 0 and 10, multiply your answer by 10: Math. random() * 10 To get it to be a whole number, i.e. an integer, apply Math. floor, which rounds down to the nearest whole number: Math.

What does math random () 0.5 do?

random() - 0.5) , returns with equal probability that the first number is greater than the second, or vice versa, which makes the shuffle work much better.


2 Answers

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
like image 111
James Donnelly Avatar answered Sep 19 '22 09:09

James Donnelly


Math.Random() returns a number between 0 and 1, excluding 1.

So when you multiply it with 5, you get a number between 0 and 5 but not 5.

Math.floor() on this number rounds down to a whole number.

So numbers you will get are either 0, 1, 2, 3 or 4.

Adding 1 to this range gives you a number in [1, 2, 3, 4, 5].

like image 24
Zero Fiber Avatar answered Sep 23 '22 09:09

Zero Fiber