Recuerda que en las ciencias informáticas un error suele tener diferentes soluciones, por lo tanto te enseñamos lo mejor y más óptimo.
Solución:
Escribí una publicación de blog sobre cómo generar números aleatorios con cualquier distribución dada:
Generating random non-uniform data in C#
Resumiendo, el algoritmo que quieres es:
- Calcula lo deseado función de distribución de probabilidad tal que el área bajo una parte de la curva es igual a la probabilidad de que se genere aleatoriamente un valor en ese rango.
- Integre la distribución de probabilidad para determinar la distribución acumulativa.
- Invierta la distribución acumulada para obtener la función cuantil.
- Transforme sus datos aleatorios uniformemente distribuidos sobre (0,1) ejecutándolos a través de la función cuantil.
Por supuesto, si ya conoce la función de cuantiles para su distribución deseada, entonces no necesita realizar los pasos uno a tres.
Usted dice que quiere un generador de números aleatorios normalmente distribuidos (gaussianos) entre 0 y 1.
En primer lugar, la distribución normal no está limitada … la función que muestra en su ejemplo genera números aleatorios normalmente distribuidos con una media de 0.0 y una desviación estándar de 1.0
Puede generar valores aleatorios normalmente distribuidos de cualquier media y desviación estándar multiplicando el valor que obtiene de esta función por la desviación estándar deseada y luego sumando la media deseada…
El código está bien tal como está: el problema es un malentendido de la distribución gaussiana (normal) que tiene un rango de -inf a +inf…
alrededor de 2/3 de las veces el valor que obtenga estará entre +/- 1 desviación estándar… alrededor del 95% de las veces el valor estará entre +/1 3 veces la desviación estándar…
Si guardas alguna indecisión y capacidad de reformar nuestro división puedes añadir una explicación y con deseo lo leeremos.