Heim  >  Artikel  >  Backend-Entwicklung  >  Wie Zufallszahlen erzeugt werden

Wie Zufallszahlen erzeugt werden

WBOY
WBOYOriginal
2024-07-23 21:03:14434Durchsuche

How Random Numbers are Generated

Die Generierung von Zufallszahlen verstehen

Zufallszahlen spielen in verschiedenen Bereichen wie Simulationen, Kryptographie, statistischer Stichprobenziehung und mehr eine entscheidende Rolle. Dieser Artikel befasst sich mit der Generierung von Zufallszahlen und konzentriert sich dabei auf zwei beliebte Programmiersprachen: JavaScript und Python.

Pseudozufallszahlengeneratoren (PRNGs)

Die meisten Programmiersprachen verwenden Pseudozufallszahlengeneratoren (PRNGs), um Zufallszahlen zu erzeugen. PRNGs verwenden mathematische Algorithmen, um zufällig erscheinende Zahlenfolgen zu generieren. Diese Zahlen sind nicht wirklich zufällig, da sie durch einen Anfangswert, den sogenannten Startwert, bestimmt werden. Für viele Anwendungen reichen sie jedoch aus.

Eigenschaften von PRNGs

  1. Deterministisch: Bei gleichem Startwert erzeugt ein PRNG immer die gleiche Zahlenfolge.
  2. Periodizität: PRNGs wiederholen ihre Zahlenfolge schließlich nach einer bestimmten Zeitspanne.
  3. Geschwindigkeit: PRNGs sind im Allgemeinen schnell und effizient.

JavaScript: Math.random()

Die Funktion Math.random() von JavaScript wird häufig zum Generieren von Zufallszahlen verwendet. Der genaue von Math.random() verwendete Algorithmus kann je nach JavaScript-Engine variieren, ein weit verbreiteter Algorithmus ist jedoch der Mersenne Twister.

Wie Math.random() funktioniert

Der Mersenne Twister ist für seinen langen Zeitraum und seine hochwertige Zufälligkeit bekannt. Hier ist ein vereinfachtes Beispiel dafür, wie der Mersenne Twister-Algorithmus in JavaScript implementiert werden kann:

class MersenneTwister {
  constructor(seed) {
    if (seed === undefined) {
      seed = new Date().getTime();
    }
    this.mt = new Array(624);
    this.index = 0;
    this.mt[0] = seed;
    for (let i = 1; i < 624; i++) {
      this.mt[i] = (0x6c078965 * (this.mt[i - 1] ^ (this.mt[i - 1] >> 30)) + i) >>> 0;
    }
  }

  generate() {
    if (this.index === 0) {
      this.twist();
    }
    let y = this.mt[this.index];
    y = y ^ (y >> 11);
    y = y ^ ((y << 7) & 0x9d2c5680);
    y = y ^ ((y << 15) & 0xefc60000);
    y = y ^ (y >> 18);
    this.index = (this.index + 1) % 624;
    return y / 0xffffffff;
  }

  twist() {
    for (let i = 0; i < 624; i++) {
      const y = (this.mt[i] & 0x80000000) + (this.mt[(i + 1) % 624] & 0x7fffffff);
      this.mt[i] = this.mt[(i + 397) % 624] ^ (y >> 1);
      if (y % 2 !== 0) {
        this.mt[i] = this.mt[i] ^ 0x9908b0df;
      }
    }
  }
}

// Example usage:
const mt = new MersenneTwister(12345); // Seed value
const randomNumber = mt.generate(); // Get a random number
console.log(randomNumber);

Dieser Code demonstriert eine vereinfachte Version des Mersenne Twister-Algorithmus, der zur Generierung von Zufallszahlen verwendet wird.

Verwenden von Math.random()

In JavaScript können Sie mit Math.random():
eine Zufallszahl zwischen 0 (einschließlich) und 1 (ausschließlich) generieren

const randomNumber = Math.random();
console.log(randomNumber);

Python: Zufallsmodul

Python stellt das Zufallsmodul bereit, das verschiedene Funktionen zum Generieren von Zufallszahlen enthält. Der vom Zufallsmodul von Python verwendete Standard-PRNG-Algorithmus ist ebenfalls der Mersenne Twister.

So verwenden Sie das Zufallsmodul von Python

Hier sind einige Beispiele für die Generierung von Zufallszahlen in Python:

import random

# Generate a random float between 0.0 and 1.0
random_float = random.random()
print(random_float)

# Generate a random integer between 1 and 100
random_int = random.randint(1, 100)
print(random_int)

# Generate a random number from a normal distribution with mean 0 and standard deviation 1
random_normal = random.gauss(0, 1)
print(random_normal)

Seeding des Zufallszahlengenerators

Um die Reproduzierbarkeit sicherzustellen, können Sie den Zufallszahlengenerator in Python starten:

import random

# Seed the random number generator
random.seed(12345)

# Generate random numbers
print(random.random())
print(random.randint(1, 100))

Die Verwendung desselben Startwerts erzeugt bei jeder Ausführung des Programms dieselbe Folge von Zufallszahlen.

Abschluss

Zufallszahlengenerierung ist ein grundlegendes Konzept mit einem breiten Anwendungsspektrum. Während die von Math.random() in JavaScript und dem Zufallsmodul in Python generierten Zahlen nicht wirklich zufällig sind, sind sie für die meisten praktischen Zwecke ausreichend zufällig. Für Entwickler und Forscher ist es gleichermaßen wichtig zu verstehen, wie diese Generatoren funktionieren und wie man sie effektiv nutzt.


Dieser Artikel bietet einen grundlegenden Überblick darüber, wie Zufallszahlen in JavaScript und Python generiert werden, zusammen mit praktischen Beispielen für die Verwendung von Math.random() und dem Zufallsmodul von Python.

Das obige ist der detaillierte Inhalt vonWie Zufallszahlen erzeugt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn