Js Zufallszahlengenerator. Zufällig in JavaScript verwaltet. Potenzierung

Technisch gesehen ist der Begriff „Zufallszahlengenerator“ Unsinn, da Zahlen selbst nicht zufällig sind. Ist beispielsweise 100 eine Zufallszahl? Was ist mit 25? Was dieser Begriff eigentlich bedeutet, ist, dass er eine Folge von Zahlen erzeugt, die zufällig erscheinen. Dies wirft eine schwierigere Frage auf: Was ist eine Folge von Zufallszahlen? Die einzig richtige Antwort: Eine Folge von Zufallszahlen ist eine Folge, in der alle Elemente keinen Zusammenhang haben. Diese Definition führt zu dem Paradoxon, dass jede Sequenz entweder zufällig oder nicht zufällig sein kann, je nachdem, wie die Sequenz erhalten wird. Zum Beispiel die folgende Zahlenfolge
1 2 3 4 5 6 7 8 9 0
wurde erhalten, indem die oberste Zeile der Tastatur der Reihe nach eingegeben wurde, sodass die Reihenfolge nicht als zufällig generiert betrachtet werden kann. Was aber, wenn Sie die gleiche Reihenfolge erhalten, wenn Sie die nummerierten Tennisbälle aus dem Fass nehmen? In diesem Fall handelt es sich bereits um eine zufällig generierte Sequenz. Dieses Beispiel zeigt, dass die Zufälligkeit einer Sequenz davon abhängt, wie sie erhalten wurde, und nicht von ihr selbst.

Denken Sie daran, dass eine computergenerierte Zahlenfolge deterministisch ist: Jede Zahl außer der ersten hängt von den Zahlen davor ab. Technisch bedeutet dies, dass ein Computer nur eine quasizufällige Zahlenfolge erzeugen kann, d. h. Tatsächlich sind sie nicht wirklich zufällig. Dies ist jedoch für die meisten Aufgaben ausreichend und der Einfachheit halber werden solche Sequenzen als zufällig bezeichnet. Eine sehr interessante Methode wurde von John von Neumann entwickelt; es wird oft als quadratischer Mittelwert bezeichnet. Bei dieser Methode wird die vorherige Zufallszahl quadriert und dann werden die mittleren Ziffern aus dem Ergebnis extrahiert. Wenn Sie beispielsweise Zahlen mit drei Ziffern erstellen und die vorherige Zahl 121 war, ergibt das Quadrieren das Ergebnis 14641. Das Isolieren der mittleren drei Ziffern ergibt die nächste Zufallszahl 464. Der Nachteil dieser Methode besteht darin, dass sie eine sehr große Zahl hat kurze Wiederholungsperiode, Zyklus genannt. Aus diesem Grund diese Methode heute nicht genutzt. Moderne Methoden Das Generieren von Zufallszahlen ist viel schwieriger.

Zufallszahlen in PHP

PHP verfügt über zwei Gruppen von Funktionen zum Arbeiten mit Zufallszahlen. Rein äußerlich sind sie durch das Präfix mt_ für alle Funktionen einer der Gruppen zu unterscheiden.

Veraltete Funktionen
Rand-Funktion Gibt eine Ganzzahl zwischen Null und dem Wert von RAND_MAX (also 32767) zurück. Kann zwei optionale ganzzahlige Parameter haben – wenn sie angegeben werden, wird eine Zufallszahl vom ersten bis zum zweiten Parameter generiert.

Echo rand(); Echo Rand(1.100); // Gib eine Zufallszahl von 1 bis 100 aus

Funktionsrand. Gibt die Folge von Zufallszahlen an, die von der Rand-Funktion erzeugt werden. Hat einen ganzen Parameter – when verschiedene Bedeutungen Mit diesem Parameter erzeugt Rand verschiedene Zahlenfolgen. Die srand-Funktion muss nur einmal vor allen Aufrufen der rand-Funktion aufgerufen werden. Anwendungsbeispiel:

Srand(1288); // Initialisiere den Zufallszahlengenerator for($i=0; $i Anzahl der Elemente im Bereich = 247 - 78 + 1 = 170; (Da beide Grenzen umfassen

/*Methode 1:*/ var i = 78, j = 247, k = 170, a = , b = , c, d, e, f, l = 0;< 0) { num3 += 2147483647; } this.SeedArray = num3; this.inext = num; this.inextp = num2; return num3; }; Random.prototype.Sample = function () { return this.InternalSample() * 4.6566128752457969E-10; }; Random.prototype.GetSampleForLargeRange = function () { var num = this.InternalSample(); var flag = this.InternalSample() % 2 == 0; if (flag) { num = -num; } var num2 = num; num2 += 2147483646.0; return num2 / 4294967293.0; }; Random.prototype.Next = function (minValue, maxValue) { if (!minValue && !maxValue) return this.InternalSample(); var num = maxValue - minValue; if (num количество элементов диапазона = 247 - 78 + 1 = 170; (так как обе границы включены.

for(; i = 56) ( num = 1; ) if (++num2 >= 56) ( num2 = 1; ) var num3 = this.SeedArray - this.SeedArray;

if (num3 == 2147483647) ( num3--; ) if (num3

/*Methode 1:*/ var i = 78, j = 247, k = 170, a = , b = , c, d, e, f, l = 0;< how_many_number; i++) { var gen_num = parseInt((Math.random() * (max-min+1)) + min); do { var is_exist = random_number.indexOf(gen_num); if (is_exist >for(; i 20) ( bool = true; ) else ( bool = false; ) ) Rückgabenummer; )

Mit dem folgenden Code können Sie ein Array von Zufallszahlen ohne Wiederholung innerhalb eines bestimmten Bereichs generieren.

Funktion genRandomNumber(how_many_number,min,max) ( // Parameter // how_many_number: wie viele Zahlen Sie generieren möchten. Zum Beispiel ist es 5. // min(inklusive): minimaler/niedriger Wert eines Bereichs. Es muss beliebig sein positive ganze Zahl, aber kleiner als max. d. h. 4 // max(inklusive): Maximaler Wert eines Bereichs, es muss eine beliebige positive ganze Zahl sein, d. h. 50 // Rückgabetyp: Array var random_number = for (var i = 0; i

= 0) ( gen_num = parseInt((Math.random() * (max-min+1)) + min); ) else ( random_number.push(gen_num); is_exist = -2; ) ) while (is_exist > -1 );

) document.getElementById("box").innerHTML = random_number;

)

Um eine Zufallszahl zu erhalten, beispielsweise zwischen 1 und 6, gehen Sie zunächst wie folgt vor:

Var-Wert = 0,5 + (Math.random() * ((6 - 1) + 1)) var roll = Math.round(value);

Rücklaufrolle;

Im Allgemeinen lautet der Code für die Verwendung von Variablen:

Var value = (Min - 0,5) + (Math.random() * ((Max - Min) + 1)) var roll = Math.round(value);

Rücklaufrolle;

Der Grund dafür, 0,5 vom Mindestwert zu subtrahieren, besteht darin, dass Sie bei Verwendung nur des Mindestwerts am Ende eine ganze Zahl erhalten, die größer als Ihr Höchstwert wäre. Indem Sie 0,5 vom Minimalwert entfernen, verhindern Sie im Wesentlichen, dass der Maximalwert abgerundet wird.

Ich hoffe, das hilft.

Zufällige Ganzzahl zwischen niedrigstem und höchstem Wert:

Funktion randomRange(l,h)( var range = (h-l); var random = Math.floor(Math.random()*range); if (random === 0)(random+=1;) return l+random; )

Nicht die eleganteste Lösung, aber etwas schnelles.

Funktion getRandomInt(lower, Upper) ( //um eine gleichmäßige Stichprobenverteilung zu erzeugen return Math.floor(lower + (Math.random() * (upper - Lower + 1))); //um eine ungleichmäßige Stichprobenverteilung zu erzeugen // return Math.round(lower + (Math.random() * (upper - Lower))); //um den Maximalwert von den möglichen Werten auszuschließen //return Math.floor(lower + (Math.random() * (oben - unten)));< Number.MIN_SAFE_INTEGER) { throw new Error("Arguments must be safe integers."); } else if (range >Um diese Funktion und Variationen dieser Funktion zu testen, speichern Sie den folgenden HTML-/JavaScript-Code in einer Datei und öffnen Sie sie in einem Browser. Der Code zeigt ein Diagramm an, das die Verteilung von einer Million Funktionsaufrufen zeigt. Der Code zeichnet auch Randfälle auf. Wenn die Funktion also einen Wert größer als max oder kleiner als min erzeugt, wissen Sie darüber Bescheid.< min) { throw new Error("max (${max}) must be >= min ($(min)."); ) else if (min === max) ( return min; ) let generic; do ( generic = crypto.getRandomValues(new Uint32Array(1)); ) while (generated > maxUnbiased ); return min + (generated % mightResultValues); console.log(randomInteger(-8, 8)); 944450079 console.log(randomInteger(-1, 0xFFFFFFFF)); // Fehler: Bereich von 4294967296, der -1 bis 4294967295 abdeckt, ist > 4294967295. console.log(new Array(12). fill().map(n => randomInteger (8, 12)));

Ein „Algorithmus“ zur zufälligen Auswahl von Werten aus einem Array, ohne sie zu wiederholen. Genauer gesagt habe ich es im Rahmen meiner JS-Ausbildung verwendet, um eine klassische RPG-Gruppe von Charakteren (Barbar, Magier, Dieb, Ritter, Priester) zu generieren, ohne Klassen und Namen zu wiederholen.

Das Prinzip ist äußerst einfach, kann aber für JS-Anfänger wie mich nützlich sein. Die Verbindung zu Rollenspielen ist rein symbolischer Natur – jetzt versuche ich aktiv, mein Profil von Marketing auf IT zu ändern (ich habe erkannt, dass meine Seele darin liegt), und das Üben in Spielform ist viel interessanter.

1. Erstellen Sie eine Vorlage. Bevor Sie eine Gruppe von Zeichen generieren, müssen Sie eine Vorlage für deren Generierung festlegen. Eigentlich ist es hier:

Funktion GamePlayer(n, r, l, p) ( this.nick = n; this.role = r; this.level = l; this.portrait = p; )
Tatsächlich erstellt diese Funktion Zeichen aus den Variablen, über die sie aufgerufen wird. Zum Beispiel:

Var player1 = neuer GamePlayer („Power Ranger“, „barbarian“, „64“, „img/barbarian.jpg“)
Jetzt speichert die Variable „player1“ einen Power Ranger-Barbaren der Stufe 64 mit einem bestimmten Porträt; Wir können jeden seiner Parameter im Hauptteil der Seite anzeigen, indem wir „player1.nick“, „player1.level“ usw. verwenden.

Die Werte (n, r, l, p) von GamePlayer sind für den Empfang und die Anordnung von Daten in der Funktion verantwortlich. Wenn wir im Beispiel n und r vertauschen, dann bleibt der mächtige Waldläufer Barbarian in Spieler1, was nicht ganz der Aufgabe entspricht.

2. Definieren Sie Arrays Um Zeichen nicht selbst zu erstellen, sondern fast zufällig zu generieren (wie im Titel versprochen), benötigen wir Arrays, aus denen wir die Parameter dieser Zeichen übernehmen. Wie bereits oben beschrieben, haben wir nur 4 Parameter: Charaktername, Klasse, Level und Porträt.

Array für Namen:

Var playerNames = ["Rabbit Helpless", "Warm Dreaded Foal", "Desire Kit", "Angel Dusty", "Sweety Frozen", "Silver Heavy Wombat", "Lost Puma", "Vital Panda", "Rolling Sun" , „Steel Runny“, „Young Fox“, „Needless Ruthless Volunteer“, „Chipmunk Cult“, „Indigo Puppy“];
Es wäre möglich, noch weiter zu gehen und Namen aus 2-3 Komponenten zu generieren, aber der Algorithmus für eine solche Verbesserung enthält nichts Neues (die gleiche Zufälligkeit) und würde dann den Lernprozess einfach erschweren.

Array für Klasse:

Var playerRoles = ["barbarian", "mage", "rogue", "knight", "priest"];
Alles ist genauso offensichtlich. Mehrere Zeichenfolgen, aus denen wir dann Werte auswählen, die auf der Seite angezeigt werden sollen.

Array für Ebene:

In diesem speziellen Beispiel wollte ich, dass alle Gruppenmitglieder zwischen Level 60 und 70 sind. Da sich die Bedingungen jedoch ändern können, war es notwendig, ein Array von Ebene 0 bis 80 zu erstellen, aus dem dann die erforderlichen Werte ausgewählt werden. In einer Schleife erstellt:

Var playerLevels = ; für (i = 0;i