¿Es posible obtener un número aleatorio entre 1 y 100 y mantener los resultados principalmente dentro del rango de 40 a 60? Quiero decir, rara vez saldrá de ese rango, pero quiero que esté principalmente dentro de ese rango... ¿Es posible con JavaScript/jQuery?
En este momento solo estoy usando Math.random() * 100 + 1 básico.
La forma más sencilla sería generar dos números aleatorios del 0 al 50 y sumarlos.
Esto da una distribución sesgada hacia 50, de la misma manera que tirar dos dados sesga hacia 7.
De hecho, al usar una mayor cantidad de "dados" (como sugiere @Falco) , puede hacer una aproximación más cercana a una curva de campana:
function weightedRandom(max, numDice) { let num = 0; for (let i = 0; i < numDice; i++) { num += Math.random() * (max/numDice); } return num; } 
JSFiddle: http://jsfiddle.net/797qhcza/1/
Tiene algunas buenas respuestas aquí que brindan soluciones específicas; déjame describirte la solución general. El problema es:
La solución general a este problema es calcular la función cuantil de su distribución deseada y luego aplicar la función cuantil a la salida de su fuente uniforme.
La función cuantil es la inversa de la integral de su función de distribución deseada. La función de distribución es la función en la que el área bajo una parte de la curva es igual a la probabilidad de que el elemento elegido al azar esté en esa parte.
Doy un ejemplo de cómo hacerlo aquí:
http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/
El código está en C#, pero los principios se aplican a cualquier lenguaje; debería ser sencillo adaptar la solución a JavaScript.
Tomar matrices de números, etc. no es eficiente. Debe tomar una asignación que tome un número aleatorio entre 0 y 100 y se asigne a la distribución que necesita. Entonces, en su caso, podría tomar f(x)=-(1/25)x 2 +4x para obtener una distribución con la mayor cantidad de valores en el medio de su rango.
