Se ha discutido muchas veces en el foro de quad. Una búsqueda de la palabra MathRand da más de 15 páginas de resultados
Por ejemplo, estos temas:
https://www.mql5.com/ru/forum/123337
https://www.mql5.com/ru/forum/111855
- www.mql5.com
Por favor, dime cómo MathRand() obtiene los valores.
¿Podemos esperar que MathRand() se distribuya uniformemente dentro del rango establecido?
Lo comprobé en php hace tiempo.
Parece que genera un gran número de números aleatorios y luego los traza.
O se puede, por ejemplo, averiguar la cantidad de números iguales para una estimación aproximada.
Genera un par de cientos de números y escríbelos en un archivo, luego haz un gráfico con al menos Excel.
No pude leer todos los enlaces ofrecidos para leer))
Observando el número de mensajes y de participantes en el debate, llegué a una conclusión:
- MathRand() es seguro de usar
- Si no tiene suficiente "resolución" 0...32767, puede utilizar MathRand()*MathRand() - la distribución no se volverá muy "sesgada" en uno u otro lado
Una estimación aproximada no es difícil de realizar
int A[32768] ;
for (int i=0; i<1000000; i++)
A[MathRand()]++;
¿pero por qué?
Para mis propósitos, el comentario de los desarrolladores es suficiente
- www.mql5.com
Necesito desplazar aleatoriamente los pesos en los algoritmos de lógica difusa
lo principal es no tener un "deslizamiento" constante en una sola dirección
Gracias por el "wow", por supuesto, pero en mi caso es innecesario ))
sobre
"- si no hay suficiente "resolución" 0...32767, puedes tomar MathRand()*MathRand(), - la distribución no se volverá muy "sesgada" hacia un lado u otro"
Me equivoqué...
la expectativa se desplazará a la izquierda del centro del rango (sospecho que a 1/4 * 32768^2, pero no estoy seguro de nada)
en general, mi afirmación era errónea
sobre
"- si no hay suficiente "resolución" 0...32767, puedes tomar MathRand()*MathRand(), - la distribución no se volverá muy "sesgada" hacia un lado u otro"
Me equivoqué...
la expectativa se desplazará a la izquierda del centro del rango (sospecho que a 1/4 * 32768^2, pero no estoy seguro de nada)
en general, mi afirmación era errónea.
hmlo d-range [0, (2^rstep)-1]
long ranD(int rstep) { long div=1; long r=0; for(int i=1;i<=rstep;i++) { if(MathRand()+1>16383.5){if(i==1){r=1;}else{r+=div;}} div=div*2; } return(r); }
Puedes utilizar int o double o ulong en lugar de long.
rstep [0, 2^rstep-1] - no se sabe qué es este parámetro
Pregunta:
Necesito cambiar una variable doble de forma aleatoria con una precisión de, por ejemplo, hasta el octavo decimal.
MathRand()/32768 dará un paso de 0,00003 - no es suficiente.
¿Cómo obtener un valor aleatorio (0...1) uniformemente espaciado a 0,00000001 con MathRand() ?
rstep [0, 2^rstep-1] - no se entiende qué es este parámetro
Pregunta:
Necesito cambiar una variable doble de forma aleatoria con una precisión de, por ejemplo, hasta el octavo decimal.
MathRand()/32768 dará un paso de 0,00003 - no es suficiente.
¿Cómo obtener un valor aleatorio uniformemente distribuido en (0...1) con una discreción de 0,00000001 utilizando MathRand() ?
en rsign=1 (-1,1) en rsign=0 (0,1)
double ranD(int rsign,int rstep) { double div=2; double r=0; for(int i=1;i<=rstep;i++) { if(MathRand()+1>16383.5){r+=1/div;} div=div*2; } if(rsign==1) { r=2*r-1; } return(r); }
rstep es un grado.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Por favor, dime cómo MathRand() obtiene los valores.
¿Podemos esperar que MathRand() se distribuya uniformemente dentro del rango establecido?