Hola a todos,
He estado mirando por la web alguna manera de poder realizar una funcion que nos devuelva un numero aleatorio entre un rango con la funcion Match.Random(), pero nada me parece lo suficiente preciso (algunos numero salen mas veces que otros)
He realizado uno con ayuda de la funcion Match.Random(), el planteamiento seria el siguiente;
-La Match.Random() nos devuelve un numero entre 0 y 1 con muchos decimales, imaginemos esto como una linea.
-Esta linea la dividiremos en tantos trozos como posibilidades queramos poner, por ejemplo, un rango entre 1 y 10 nos dara 10 posibles resultados distintos
-Ahora buscaremos el numero mas proximo al que nos devolvio la funcion Match.Random() en esa linea que hemos dividido en tantos trozos como posibilidades queriamos obtener(nuestro rango)
-Cuando hayemos cual es, apuntaremos la posicion y la sumares al Numero minimo del rango, en nuestro ejemplo seria 1 + la posicion en la que se encontrava mas proximo al valor de Match.Random()
-La primera posicion en la q debemos de comparar la proximidad es el valor de la unidad de trozo entre 2 para q los rangos de las unidades tengan las mismas probabilidades y apartir de esa se va avanzando de unidad en unidad hasta llegar a 1
--------------------------------------------------------------------------------------------------------
Aqui os dejo mi funcion q es lo mas preciso q podido hacer, AUNQUE ME GUSTARIA QUE SI ES POSIBLE HACERLA MAS PRECISA Y MAS OPTIMA Q ME AYUDEN
--------------------------------------------------------------------------------------------------------
function RangeRandom(NumMin,NumMax)
{
var Cluster = 1 / (NumMax - NumMin + 1);
var NumRandom = Math.random();
var AcCluster = Cluster / 2;
var NumDiff;
var NumDiffAux;
var ii = 0;
NumDiffAux = AcCluster - NumRandom;
if(NumDiffAux < 0)
NumDiffAux = NumDiffAux *(-1);
while(AcCluster < 1)
{
AcCluster = AcCluster + Cluster;
NumDiff = AcCluster - NumRandom;
if(NumDiff < 0)
NumDiff = NumDiff *(-1);
if(NumDiff > NumDiffAux)
return (NumMin + ii);
NumDiffAux = NumDiff;
ii++;
}
}