Foros del Web » Programando para Internet » Javascript »

¿Obtener un numero aleatorio entre un rango?

Estas en el tema de ¿Obtener un numero aleatorio entre un rango? en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/12/2009, 11:51
 
Fecha de Ingreso: octubre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
¿Obtener un numero aleatorio entre un rango?

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++;
}
}
  #2 (permalink)  
Antiguo 23/12/2009, 12:04
 
Fecha de Ingreso: agosto-2008
Mensajes: 26
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: ¿Obtener un numero aleatorio entre un rango?

yo uso esta:

function aleatorio(inferior, superior){
var numPosibilidades = superior - inferior
var aleat = Math.random() * numPosibilidades
aleat = Math.round(aleat)

return parseInt(inferior) + aleat
}
  #3 (permalink)  
Antiguo 23/12/2009, 12:42
 
Fecha de Ingreso: octubre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: ¿Obtener un numero aleatorio entre un rango?

Cita:
Iniciado por Javitus Ver Mensaje
yo uso esta:

function aleatorio(inferior, superior){
var numPosibilidades = superior - inferior
var aleat = Math.random() * numPosibilidades
aleat = Math.round(aleat)

return parseInt(inferior) + aleat
}

Hola Javitus, ya estuve probando esa funcion pero hay numeros q salen mas veces q otros y no me sirve

gracias!!
  #4 (permalink)  
Antiguo 23/12/2009, 12:58
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: ¿Obtener un numero aleatorio entre un rango?

Si, ademas un poco tarde te acordaste de parsearlo....
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 23/12/2009, 13:54
 
Fecha de Ingreso: octubre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: ¿Obtener un numero aleatorio entre un rango?

Bueno, tras un repaso y con el mismo planteamiento q puse arriba lo he dejado en esto, ahora admite rangos con numeros negativos;


function RangeRandom(NumMin,NumMax)
{
var NumP = NumMax - NumMin;
if(NumP < 0)
NumP = NumP * (-1);
NumP++;

/*var Cluster = 1 / NumP;
var AcCluster = Cluster / 2;
var NumRandom = Math.random() - AcCluster;
return Math.round((NumRandom / Cluster) + NumMin);*/


return Math.round(((Math.random() - ((1 / NumP) / 2 )) / (1 / NumP)) + NumMin);
}


LO DICHO SI HAY ALGO MEJOR BIENVENIDO SEA!!

Última edición por macamba; 24/12/2009 a las 07:52
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:50.