Foros del Web » Programando para Internet » Javascript »

Firefox y Math.random()

Estas en el tema de Firefox y Math.random() en el foro de Javascript en Foros del Web. Hola estoy realizando un experimento cientifico online. Lo han pasado cerca de 9000 personas. Al comenzar utilizo una rutina en JS para asignar "al azar" ...
  #1 (permalink)  
Antiguo 21/10/2010, 10:18
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 0
Firefox y Math.random()

Hola
estoy realizando un experimento cientifico online. Lo han pasado cerca de 9000 personas. Al comenzar utilizo una rutina en JS para asignar "al azar" a la persona a un grupo de control o a uno experimental.

var asignar, control;
asignar = parseInt(Math.random()*10);
formulario.asignacion.value=asignar;
if (asignar <= 4)
{control = true;
return control;}
else
{control =false;
return control;}

Me encuentro que para ordenadores que usan firefox bajo windows, la distribución de los números que genera Math.random no pasa una prueba de aleatoriedad, existiendo un sesgo hacia el valor "0", cosa que no ocurre con Explorer.


ASIGNACION
Frecuencia Porcentaje
Válidos 0 182 12,1
1 152 10,1
2 154 10,2
3 160 10,6
4 159 10,6
5 149 9,9
6 143 9,5
7 150 10,0
8 128 8,5
9 129 8,6
Total 1506 100,0


Si ejecuto la rutina 10 millones de veces seguidas con Firefox bajo Windows, los resultados generados son numeros aleatorios. Así que el problema puede estar en que al iniciar firefox y ejecutar el Math.random() por primera vez, y sólo la primera vez y no las siguientes, sea algo más probable encontrase con un 0,0... (al multiplicarlo por 10 y obtener la parte entera daria un "0") que otros valores.

¿Dónde podría encontrar documentación sobr este tema?. Se que para generar numeros pseudoaleatorios se utiliza una semilla inicial y luego unos calculos matematicos que generan como resultado numeros pseudoaletorios. Quizás el primer numero generado (cuando se usa Firefox bajo Windows) dependa directamente de la semilla y ésta presente un sesgo en el sentido que he indicado antes.

Gracias y perdonad la longitud del texto.

Roge
  #2 (permalink)  
Antiguo 21/10/2010, 12:45
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Firefox y Math.random()

no entiendo nada de lo que estas explicando, o sera que me quede tonto porque me acabo de levantar. ¿cual es tu preocupación? ¿que firefox devuelve frecuentemente el mismo número? pues eso no lo puedes controlar aunque seria interesante conocer el patrón o algoritmo que se utiliza para generar dicho número. de momento lo único que te puedo sugerir es que invoques varias veces Math.random antes de obtener el número.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 21/10/2010, 18:32
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Firefox y Math.random()

Hola Zerokilled

una aproximación al problema es que con Explorer bajo Windows sí que se genera un patrón de numeros al azar, pero la misma rutina en Firefox bajo Windows no los genera al azar. El experimento ya ha sido realizado y no se puede cambiar nada, tan solo inetrpretar los resultados obtenidos.
Por eso solicitaba información o fuentes donde poder documentarme de como funciona en profundidad math.random bajo Firefox y bajo Explorer, por si hay alguna diferencia sustancial que pueda explicar los datos observados (en firefox bajo Windows math.random esta sesgado hacia el numero cero)

Gracias y un saludo,

Roge
  #4 (permalink)  
Antiguo 21/10/2010, 19:02
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Firefox y Math.random()

pues eso depende de como cada fabricante de interprete javascript este diseñado. por ejemplo, chrome V8, iexplorer jscript, firefox spidermonkey (parece que hay un nuevo motor llamado tracemonkey). en fin, encontre un articulo donde en una seccion habla acerca de Math.random y señala que en algunos navegadores actuales el numero random se genera usando un algoritmo con el timestamp. http://www.merlyn.demon.co.uk/js-randm.htm en fin, tendras que buscas si existe alguna documentacion estos motores. y de existir, revisar si se señala algo acerca de un patron o algoritmo y luego compararlos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 26/10/2010, 03:19
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Firefox y Math.random()

gracias Zerokilled

está muy bien el link que me has pasado, pero no encuentro lo que busco.

Desde JavaScript, ¿cómo podría realizar un seed antes de utilizar math.random?
Por lo que sé el proceso de seed no es accesible desde JavaScript. No sé si se realiza automaticamente cada vez que abres el navegador, o quizas cada vez que reinicias el sistema operativo, o cuando cambias de página de navegación.

La idea es que para emular el funcionamiento de 1 millon de ordenadores que usan cada uno una sóla vez el método math.random() para obtener cada uno un sólo número aleatorio, (es decir, se realiza automaticamente un seed y luego se llama a math.random para obtener un número), necesito un sólo ordenador que sea capaz de ejecutar 1 millon de veces un math.random, pero realizando siempre previamente un seed.

¿Conoces/conoceis algún método?

Gracias,

Roge
  #6 (permalink)  
Antiguo 26/10/2010, 03:40
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Firefox y Math.random()

te copio lo que dice el enlace acerca del seed.
Cita:
The random number generator of Math.random() is commonly seeded from the current time (that is not a requirement of ECMA 262).
Cita:
Iniciado por Traducido
el generador de numero aleatorio de Math.random() es comunmente inicializado a partir del tiempo actual (no es un requisito de ECMA262).
en javascript no existe forma de manejar eso. de hacer algo parecido tampoco sabria decirte porque no se cual es el proposito de un seed al generar un numero aleatorio. se ve que el unico lenguaje que domino es javascript.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 26/10/2010, 04:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Firefox y Math.random()

buscando en ECMA262 5th edition por la palabra seed no me dio ningun resultado. esto es lo unico que dice acerca de random.
Cita:
Iniciado por ECMA262
15.8.2.14 random ( )
Returns a Number value with positive sign, greater than or equal to 0 but less than 1, chosen randomly or pseudo randomly with approximately uniform distribution over that range, using an implementation-dependent algorithm or strategy. This function takes no arguments.
sin embargo, en otra web [que parece tiene menos credibilidad porque google me lo marca como sitio inseguro] el autor clama lo siguiente.
Cita:
Iniciado por http://codepunk.hardwar.org.uk/ajs13.htm
Seeding

You can use a plain "Math.random()" every time you need a random number. In practice, however, the method is usually given a "seed number" in the parentheses. This is the number that is run through the randomization algorithm:

Math.random(8)
pudiera ser cierto, pero seguramente sera en alguna implementacion especifica. por ejemplo, que solo funcione en la implementacion de iexplorer.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 26/10/2010, 04:46
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Firefox y Math.random()

Gracias de todos modos Zerokilled.

el método math.random consiste en aplicar un algoritmo, digamos unas formulas matemáticas a un número inicial (el seed), con la caracteristica de que los nuevos números calculados tienen igual posibilidad de ser generados. Si se conoce el algoritmo y el seed, es posible calcular y por tanto predecir los numeros generados (imaginate eso en un casino online por ej,).
Por todo ello el seed se obtiene de fuentes dificilmente previsibles (el tiempo actual del ordenador, posición del mouse..., con lo que los numeros generados son equiprobables, y no previsibles, pseudoaleatorios. Al cabo de muchas repeticiones dado un determinado seed, los valores generados vuelven a repetirse.

Un saludo,

Roge
  #9 (permalink)  
Antiguo 26/10/2010, 04:51
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Firefox y Math.random()

Lo de math.random() con parametros funciona en Java con la clase java.util.Random, pero no en JS.

Roge

Etiquetas: firefox
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 20:18.