
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bitte sagen Sie mir, wie MathRand() Werte erhält.
Kann man erwarten, dass MathRand() gleichmäßig im angegebenen Bereich verteilt ist?
Hier ist ein Beispiel, natürlich gibt es auch andere, komplexere Algorithmen...
Quelle rand.c :
Es wird eine RNG-Funktion mit der Zahl Int von 0 bis zu einem beliebigen Wert benötigt.
Da der Höchstwert von Int =2.147.483.647 ist, rechnen wir bis zu diesem Wert.
Wir haben diese Funktion erhalten. Ich denke, die Verteilung ist gleichmäßig.
Der Artikel hat einen Generator bis zu 4294967295
Alglib SB hat einen hochpräzisen Oszillator
UPD: Ich habe es ausprobierthttps://www.mql5.com/ru/forum/324066#comment_13500222 , es scheint zu funktionieren, aber es gibt keine Dokumentation für Alglib in MQL5, Sie sollten es auf der Alglib Website lesen
Der Artikel hat einen Generator für 4294967295
Danke, ich habe es in Bezug auf die Berechnungsgeschwindigkeit verglichen.

Meine Funktion auf Standard rand() erwies sich als 2-mal langsamer. Obwohl der Code viel einfacher zu sein schien...
Es gibt einen hochpräzisen Generator in Alglib
UPD: Ich habe es ausprobierthttps://www.mql5.com/ru/forum/324066#comment_13500222 , es scheint zu funktionieren, aber es gibt keine Dokumentation für Alglib in MQL5, Sie sollten es auf der Alglib Website lesen
Ich habe es gesehen, aber ich möchte es ohne alglib. Außerdem enthält diese Funktion eine Menge */%. Ich habe seine Geschwindigkeit nicht verglichen, da er offensichtlich langsamer ist. Der Generator aus dem Artikel arbeitet mit Bitverschiebungen - er ist schneller.
Ich habe meine Funktion umgeschrieben, um die Geschwindigkeit zu optimieren:
Die Verteilung erwies sich als gleichmäßig. Bilder des Experiments finden Sie im Blog https://www.mql5.com/ru/blogs/post/735953Ich habe den RNG aus dem Artikel umgeschrieben.
Ich habe Unnötiges weggeworfen, und das ist das, was ich bekommen habe:
Auch die Verteilung war gleich.
Ich habe die Geschwindigkeit der beiden Funktionen verglichen, das Original aus dem Artikel und die einfache MathRand():
Gekürzt nach dem Artikel rnu.Rand_01() - 596 ms
Meine optimierte Version von RandomInteger() - 840 ms (alte Version 1200 ms, d.h. 25% schneller)
Nur durch MathRand() - 353 ms (am schnellsten, aber die Verteilung wird ungleichmäßig sein. Wenn der erforderliche Zahlenbereich größer als 32767 ist, wird das Ergebnis übersprungen. Wenn weniger als 32767, z. B. i=31111. dann wird häufiger auf einige Punkte gerundet).
Nutzen Sie den Vorteil)
Warum die Dinge so kompliziert machen?
Sie können es so machen (grob gesagt):
Und wenn Sie etwas herumspielen oder sehen wollen, was es zeigt, können Sie dies tun:
und sehen Sie, wie sich die Werte ändern.
Ich habe meine Funktion umgeschrieben, um die Geschwindigkeit zu optimieren:
Die Verteilung ist gleichmäßig. Sehen Sie sich die Bilder des Experiments auf dem Blog https://www.mql5.com/ru/blogs/post/735953 an.Ich habe den RNG aus dem Artikel umgeschrieben.
Ich habe Unnötiges weggeworfen, und das ist es, was ich bekommen habe:
Die Verteilung ist ebenfalls einheitlich.
Ich habe es mit der Verteilung aus der Hilfe verglichen, ich sehe keinen Unterschied