È stato discusso molte volte sul forum dei quad. Una ricerca sulla parola MathRand dà più di 15 pagine di risultati
Per esempio questi argomenti:
https://www.mql5.com/ru/forum/123337
https://www.mql5.com/ru/forum/111855
- www.mql5.com
Per favore, ditemi come MathRand() ottiene i valori.
Possiamo aspettarci che MathRand() sia distribuito uniformemente all'interno dell'intervallo indicato?
L'ho controllato in php qualche tempo fa.
Sembra generare un gran numero di numeri casuali e poi tracciare.
Oppure si può, per esempio, trovare il numero di numeri uguali per una stima approssimativa.
Genera un paio di centinaia di numeri e scrivili in un file, poi fai un grafico con almeno Excel.
Non ho potuto leggere tutti i link offerti per leggere))
Guardando il numero di post e di partecipanti alla discussione, ho fatto una conclusione:
- MathRand() è sicuro da usare
- Se non avete abbastanza "risoluzione" 0...32767, potete usare MathRand()*MathRand() - la distribuzione non diventerà pesantemente "skewed" in un lato o nell'altro
Una stima approssimativa non è difficile da eseguire
int A[32768] ;
per (int i=0; i<1000000; i++)
A[MathRand()]++;
ma perché?
Per i miei scopi, il commento degli sviluppatori è sufficiente
- www.mql5.com
E se volete "wow" allora https://www.mql5.com/ru/forum/123337/page16 il post più basso.
Ho bisogno di spostare casualmente i pesi negli algoritmi di logica fuzzy
la cosa principale è non avere un "crollo" costante in una direzione
Grazie per il "wow", naturalmente, ma nel mio caso non è necessario ))
su
"- se non c'è abbastanza "risoluzione" 0...32767, si può prendere MathRand()*MathRand(), - la distribuzione non diventerà molto "skewed" da una parte o dall'altra"
Ho sbagliato ...
l'aspettativa si sposterà a sinistra della metà dell'intervallo (sospetto che a 1/4 * 32768^2, ma non sono sicuro di nulla)
in generale, la mia affermazione era sbagliata
su
"- se non c'è abbastanza "risoluzione" 0...32767, si può prendere MathRand()*MathRand(), - la distribuzione non diventerà molto "skewed" da una parte o dall'altra"
Ho sbagliato ...
l'aspettativa si sposterà a sinistra della metà dell'intervallo (sospetto che a 1/4 * 32768^2, ma non sono sicuro di nulla)
In generale, la mia affermazione era sbagliata.
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); }
Potete usare int o double o ulong invece di long.
rstep [0, 2^rstep-1] - non so cosa sia questo parametro
Domanda:
Ho bisogno di cambiare una variabile doppia in modo casuale con una precisione, diciamo, fino all'ottava cifra decimale.
MathRand()/32768 darà un passo di 0,00003 - non abbastanza.
Come ottenere un valore casuale (0...1) uniformemente spaziato a 0.00000001 con MathRand()?
rstep [0, 2^rstep-1] - non ha capito cosa sia questo parametro
Domanda:
Ho bisogno di cambiare una variabile doppia in modo casuale con una precisione, diciamo, fino all'ottava cifra decimale.
MathRand()/32768 darà un passo di 0,00003 - non abbastanza.
Come ottenere un valore casuale uniformemente distribuito a (0...1) con 0.00000001 di discrezione usando MathRand()?
a rsign=1 (-1,1) a 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 è un grado.

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Per favore, ditemi come MathRand() ottiene i valori.
Possiamo aspettarci che MathRand() sia distribuito uniformemente all'interno dell'intervallo indicato?