Entendiendo las matematicas en la funcion generadora de numeros aleatorios

Cuéntanos qué está pasando:
Hay algun recurso para entender las matematicas de la siguiente linea de código? se para que funciona pero no logro entender de donde salio esa formula.

  **Tu código hasta el momento**

Math.floor(Math.random() * (max - min + 1)) + min
  **Información de tu navegador:**

El agente de usuario es: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36

Desafío: Genera números enteros aleatorios dentro de un rango

Enlaza al desafío:

Aui hay un link donde puedes ver una explicacion: link

Aqui trate de explicarlo:
La siguiente linea de codigo para generar numeros aleatorios se compone de diferentes partes

Math.floor(Math.random() * (max - min + 1)) + min

  • Math.floor() :
    Esta función redondea numeros decimales al numero entero inferior, por ejemplo,
    1.4 → 1
    2.56 → 2
    9.9999 →9

  • Math.random() :
    Esta funcion crea numeros pseudoaleatorios con valores entre 0 (incluyendo el cero) y 1 (sin llegar al 1)
    numero aleatorio >= 0
    numero aleatorio <1
    Osea el rango puede ir entre 0 y 0.99999…

  • (max - min + 1) :
    max - nim es la diferencia de tu rango de numeros, imagina que quieres numeros entre el 5 y 10 (los numeros posubles son, 5, 6, 7, 8, 9, 10 hay 6 posibles opciones)
    max - min = 10 - 5 = 5
    EL resultado es 5 ahora sumamos 1 para sea igual al numero de opciones del rango 5 y 10
    5 + 1 = 6

Sino sumaramos el 1 nos daria numeros aleatorios entre 5 y 10 pero sin llegar al 10 (5, 6, 7, 8, 9 hay 5 opciones)

solo falta la ultima suma

  • +min

Pero antes de explicarla veamos una vez mas la linea original, remplazando los numeros que ya tenemos (siguiendo con un rango entre 5 y 10 )

Math.floor(Math.random() * (max - min + 1)) + min

Math.floor(Math.random() * (10- 5 + 1)) + 5

Math.floor(Math.random() * (6)) + 5

Ejecuto Math.random() para obtener un numero entre 0 y 1 (incluyendo el 0 pero no el 1)

0.9595830428225811

Math.floor(0.22531975815646166 * 6) + 5

Hacemos la multiplicacion

Math.floor(1.35191854893877) + 5

Ahora Math.floor() redondeara al entero inferior el resultado es 1

(1) + 5

Sumamos nuestro numero min que es 5

Y nuestro numero aleatoreo entre 5 y 10 es 6

Esta linea de codigo nos puede dar los siguientes numeros aleatorios

Math.floor(Math.random() * (10- 5+ 1))

0,1, 2, 3, 4, 5 → 6 opciones

si a cualquiera de estos numeros le sumamos el numero min que es 5 los resultados seran

5, 6, 7, 8, 9, 10

que es el rango de numeros entre 5 y 10 (incluyendo 5 y 10)

Aligual que yo trata de ejecutar la inea de codigo por partes y sustituyendo min y max de manera manual para ver los pasos uno a uno