Das wurde schon oft im Quad-Forum diskutiert. Eine Suche nach dem Wort MathRand ergibt mehr als 15 Seiten mit Ergebnissen
Zum Beispiel diese Themen:
https://www.mql5.com/ru/forum/123337
https://www.mql5.com/ru/forum/111855
- www.mql5.com
Bitte sagen Sie mir, wie MathRand() Werte erhält.
Kann man erwarten, dass MathRand() innerhalb des angegebenen Bereichs gleichmäßig verteilt ist?
Ich habe es vor einiger Zeit in php überprüft.
Es scheint eine große Anzahl von Zufallszahlen zu generieren und dann darzustellen.
Oder Sie können z. B. die Anzahl der gleichen Zahlen für eine grobe Schätzung ermitteln.
Generieren Sie ein paar hundert Zahlen und schreiben Sie sie in eine Datei, dann erstellen Sie ein Diagramm, zumindest mit Excel.
Konnte nicht alle angebotenen Links lesen))
Anhand der Anzahl der Beiträge und der Diskussionsteilnehmer habe ich eine Schlussfolgerung gezogen:
- MathRand() ist sicher in der Anwendung
- Wenn die "Auflösung" 0...32767 nicht ausreicht, können Sie MathRand()*MathRand() verwenden - die Verteilung wird dann weder auf der einen noch auf der anderen Seite stark "verzerrt".
Eine grobe Schätzung ist nicht schwer durchzuführen
int A[32768] ;
for (int i=0; i<1000000; i++)
A[MathRand()]++;
aber warum?
Für meine Zwecke ist der Kommentar der Entwickler ausreichend
- www.mql5.com
Und wenn Sie "wow" wollen, dann https://www.mql5.com/ru/forum/123337/page16 die unterste Stelle.
Ich muss die Gewichte in Fuzzy-Logik-Algorithmen zufällig verschieben
die Hauptsache ist, dass es nicht zu einem ständigen "Abrutschen" in eine Richtung kommt
Danke für das "Wow", natürlich, aber in meinem Fall ist es unnötig ))
über
"- wenn die "Auflösung" 0...32767 nicht ausreicht, kann man MathRand()*MathRand() nehmen, - die Verteilung wird dann nicht sehr "schief" nach der einen oder anderen Seite.
Ich hatte Unrecht ...
der Erwartungswert verschiebt sich nach links von der Mitte des Bereichs (ich vermute, dass 1/4 * 32768^2, aber ich bin mir nicht sicher)
Im Allgemeinen war meine Aussage falsch.
über
"- wenn die "Auflösung" 0...32767 nicht ausreicht, kann man MathRand()*MathRand() nehmen, - die Verteilung wird dann nicht sehr "schief" nach der einen oder anderen Seite.
Ich habe es falsch verstanden ...
der Erwartungswert verschiebt sich nach links von der Mitte des Bereichs (ich vermute, dass 1/4 * 32768^2, aber ich bin mir nicht sicher)
Im Allgemeinen war meine Aussage falsch.
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); }
Sie können int oder double oder ulong anstelle von long verwenden.
rstep [0, 2^rstep-1] - nicht sicher, was dieser Parameter bedeutet
Frage:
Ich muss eine Double-Variable zufällig mit einer Genauigkeit von, sagen wir, bis zur 8.
MathRand()/32768 ergibt eine Schrittweite von 0,00003 - nicht genug.
Wie erhält man einen (0...1) gleichmäßig verteilten Zufallswert bei 0.00000001 mit MathRand() ?
rstep [0, 2^rstep-1] - ich habe nicht verstanden, was dieser Parameter bedeutet
Frage:
Ich muss eine Double-Variable zufällig mit einer Genauigkeit von, sagen wir, bis zur 8.
MathRand()/32768 ergibt eine Schrittweite von 0,00003 - nicht genug.
Wie erhält man mit MathRand() einen gleichmäßig verteilten Zufallswert bei (0...1) mit 0,00000001 Diskretion?
bei rsign=1 (-1,1) bei 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 ist ein Grad.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Bitte sagen Sie mir, wie MathRand() Werte erhält.
Kann man erwarten, dass MathRand() innerhalb des angegebenen Bereichs gleichmäßig verteilt ist?