Was ist Pseudorandom?

Was ist Pseudorandom?

Pseudozufallszahlen werden von Computern generiert. Sie sind nicht wirklich zufällig, denn wenn ein Computer richtig funktioniert, ist nichts, was er tut, zufällig. Computer sind deterministische Geräte – das Verhalten eines Computers ist konstruktionsbedingt vollständig vorhersagbar. Um also etwas Unvorhersehbares zu erzeugen, verwenden Computer mathematische Algorithmen, um Zahlen zu erzeugen, die „zufällig genug“ sind.

Wann werden Pseudozufallszahlen verwendet?

Pseudozufallszahlen sind für viele Computeranwendungen wie Spiele und Sicherheit unerlässlich. In Spielen bieten Zufallszahlen unvorhersehbare Elemente, auf die der Spieler reagieren kann, z. B. das Ausweichen einer zufälligen Kugel oder das Ziehen einer Karte aus einem Deck.

In der Computersicherheit ist Pseudozufälligkeit bei Verschlüsselungsalgorithmen wichtig, die Codes erstellen, die nicht vorhergesagt oder erraten werden dürfen.

Was ist ein PRNG?

Ein Pseudozufallszahlengenerator oder PRNG ist ein beliebiges Programm oder eine Funktion, die mathematische Zufälligkeiten simuliert. Er kann auch als DRNG (digitaler Zufallszahlengenerator) oder DRBG (deterministischer Zufallsbitgenerator) bezeichnet werden.

Die Mathematik kann manchmal komplex sein, aber im Allgemeinen erfordert die Verwendung eines PRNG nur zwei Schritte:

  1. Stellen Sie dem PRNG einen beliebigen Seed bereit.
  2. Fragen Sie nach der nächsten Zufallszahl.

Der Startwert ist ein “Startpunkt” zum Erstellen von Zufallszahlen. Der Wert wird beim Berechnen der Zahlen verwendet. Wenn sich der Ausgangswert ändert, ändern sich auch die generierten Zahlen, und ein einzelner Ausgangswert erzeugt immer dieselben Zahlen. Aus diesem Grund sind die Zahlen nicht wirklich zufällig, da echte Zufälligkeit niemals wieder hergestellt werden könnte.

Die aktuelle Uhrzeit wird häufig als eindeutiger Ausgangswert verwendet. Wenn es beispielsweise der 5. März 2018 um 17:03 Uhr und 7,01324 Sekunden UTC ist, kann dies als ganze Zahl ausgedrückt werden. Diese genaue Zeit tritt nie wieder auf, daher sollte ein PRNG mit diesem Seed einen eindeutigen Satz von Zufallszahlen erzeugen.

Notiz

Es kann nützlich sein, eine zufällig generierte Sequenz reproduzieren zu können. In akademischen Anwendungen kann eine riesige Folge von Zufallswerten für eine Simulation generiert und dann für eine spätere detailliertere Analyse exakt reproduziert werden. Als weiteres Beispiel können in Computerspielen, wenn ein Spieler ein gespeichertes Spiel lädt, alle “zufälligen” Ereignisse die gleichen sein, als ob das Spiel nie angehalten hätte. Auf diese Weise kann der Spieler dasselbe Spiel nicht wiederholt neu laden, um mehr Glück zu versuchen.

So generieren Sie Pseudozufallszahlen

Im Folgenden finden Sie einige Möglichkeiten, wie Sie eine Pseudozufallszahl in gängigen Programmen und Programmiersprachen erstellen können.

Windows-Eingabeaufforderung

An der Windows-Eingabeaufforderung oder in einer Stapeldatei erzeugt die spezielle Umgebungsvariable %RANDOM% eine Pseudozufallszahl zwischen 0 und 32767, die mit der Startzeit der Eingabeaufforderung versehen ist.

echo "So %RANDOM%!"
"So 27525!"

So erstellen Sie eine Batchdatei, die eine Zufallszahl zwischen 1 und 100 generiert:

copy con sorandom.bat
echo off
set /a myrand=%RANDOM%*100/32768+1
echo The number I was thinking of was %myrand%. Did you get it right?

Drücken Sie Strg+Z und Enter, um die Batchdatei zu speichern. Führen Sie dann die Datei aus:

sorandom
The number I was thinking of was 91. Did you get it right?

Windows PowerShell

Das Cmdlet Get-Random generiert eine Zufallszahl zwischen 0 und 2.147.483.647 (dem Höchstwert einer 32-Bit-Ganzzahl ohne Vorzeichen).

Get-Random
1333190525

Das Cmdlet akzeptiert eine Reihe von Optionen, z. B. einen Mindest- und Höchstwert. Die Werte werden abgerundet. Um also eine Zahl zwischen 1 und 100 zu generieren, setzen Sie das Maximum auf 101:

Get-Random -Minimum 1 -Maximum 101
99

Microsoft Excel

In einer Excel-Tabelle generiert die Formel =RAND() eine Zufallszahl zwischen 0 und 1. Wenn Sie beispielsweise eine Zelle markieren und =RAND() eingeben, generiert die Zelle eine Zahl, die sich ändert, wenn das Blatt neu berechnet wird.

RAND() Zufallsfunktion in Microsoft Excel

Diese Methode funktioniert auch in anderen Tabellenkalkulationsprogrammen, einschließlich LibreOffice Calc und Google Sheets.

Bei Programmiersprachen

Die meisten Programmiersprachen haben PRNG-Funktionen. Hier sind einige gängige Beispiele:

C

In der Programmiersprache C sind die PRNG-Funktionen in der Standardbibliothek stdlib definiert. Der übliche Weg, den Zufallsgenerator zu starten, ist die Funktion time(), die in time.h deklariert ist. Die generierte Zahl liegt zwischen 0 und der Konstanten RAND_MAX, einer systemspezifischen Ganzzahl, die garantiert mindestens 32767 beträgt.

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
void main () {
  srand(time(NULL)); /* seed the generator */
  int rand1 = rand(); /* a pseudorandom integer between 0 and RAND_MAX */
  printf("Random number between 0 and %d: %dn", RAND_MAX, (int)rand1);
  /* Or, within a specific range: */
  int min = 0;
  int max = 100;
  float rand2 = (float)rand() * max / RAND_MAX + 1;
  int round = (int)rand2;
  printf("Random number between %d and %d: %d (%f)n", min, max, round, rand2);
  return;
}

Ausgabe:

Random number between 0 and 2147483647: 1789080047
Random number between 0 and 100: 74 (74.369179)

C++

In C++:

#include <ctime>
#include <cstdlib>
#include <iostream>
int main () {
  srand(time(NULL));
  std::cout << "Random number between 0 and " << RAND_MAX << ": " << rand() << "n"
  << "Random number between 1 and 100: " << (rand() % 100) + 1 << std::endl;
  return 0;
}

Ausgabe:

Random number between 0 and 2147483647: 126569208
Random number between 1 and 100: 9

Python 3

Das Random-Modul in Python bietet eine Vielzahl von Funktionen zur Generierung von Zufallszahlen. In diesem Beispiel verwenden wir drei verschiedene Methoden, um eine zufällige ganze Zahl in einem Bereich zu finden.

import random from datetime import datetime random.seed(datetime.now()) print("Zufallszahl im Bereich [0,1): ", random.random())
# Within a range. These all do the same thing:
print("Random number between 1 and 100: ", round(random.random() * 100) + 1)
print("Random number between 1 and 100: ", random.randrange(1, 101))
print("Random number between 1 and 100: ", random.randint(1, 100))

Output:

Random number in range [0,1): 0.05137418896158319
Random number between 1 and 100: 27
Random number between 1 and 100: 80
Random number between 1 and 100: 80

Perl 5

In Perl:

srand(time); # changes once per second
print "Random number in range [0,1): ", rand(), "n";
print "Random number in range [1, 100]: ", int(rand(101)), "n";

Ausgabe:

Random number in range [0,1): 0.691379946963028
Random number in range [0, 100]: 82

JavaScript

console.log("Random number in range [0,1): " + Math.random());
console.log("Random number in range [1,100]: " + Math.floor(Math.random() * 101));

Sehen Sie sich die Ausgabe in der JavaScript-Konsole Ihres Webbrowsers an (in Firefox drücken Sie beispielsweise Strg+Umschalt+K):

Random number in range [0,1): 0.305008216755414
Random number in range [1,100]: 8
Notiz:

Es ist nicht möglich, die Math.random()-Funktion in JavaScript zu starten. Wenn Sie einen robusten PRNG in JavaScript benötigen, sehen Sie sich bessere Zufallszahlen für JavaScript auf GitHub an.

Beispiel PRNG: JavaScript-Widget

Mit dem untenstehenden Widget können Sie einen PRNG impfen und damit Zufallszahlen generieren.

Jedes Mal, wenn Sie eine Zufallszahl aus Ihrem gegebenen Startwert generieren, erhöht sich ihr Offset um 1. Die erste aus dem Startwert generierte Zahl hat einen Offset von Null, die zweite hat einen Offset von 1 usw. Der Generator erzeugt immer dieselbe Zahl für einen gegebenen Startwert und Offset .

Geben Sie alles, was Sie wollen, in das Feld ein, um einen einzigartigen Seed zu erstellen.

Verwenden Sie die Schaltfläche Generate, um die nächste Zufallszahl mit diesem Seed zu erhalten, und erhöhen Sie den Offset.

Verwenden Sie die Reset-Taste, um den Offset auf Null zurückzusetzen.

Geben Sie einen benutzerdefinierten Startwert ein (eine Zahl oder einen Satz):

aus Seed generierte Zahl :

Dieses Widget verwendet die Open-Source-PRNG-Skripte Alea.js und Mash.js von Johannes Baagøe.

Computersicherheit, Mersenne Twister, Monte-Carlo-Methode, Programmierung, Proof-of-Stake, Softwarebedingungen

Neueste Artikel
Vielleicht möchten Sie lesen

LEAVE A REPLY

Please enter your comment!
Please enter your name here