Start · Sprachen · PHP · Referenz · stats_rand_setall

stats_rand_setall

Funktion

Setzt die Seed-Werte des internen Zufallszahlengenerators der PECL-Stats-Erweiterung auf die angegebenen Ganzzahlen.

Kategorie: math

Signatur

stats_rand_setall(int $iseed1, int $iseed2): void

Beschreibung

stats_rand_setall() initialisiert den Zufallszahlengenerator der PECL-Stats-Erweiterung mit zwei ganzzahligen Seed-Werten. Die Funktion gehört zur stats-Erweiterung und beeinflusst ausschließlich deren internen Generator, nicht den von PHP selbst verwendeten (vgl. mt_srand()).

Durch das explizite Setzen beider Seeds lassen sich statistische Simulationen und Zufallsstichproben reproduzierbar machen: Werden dieselben Seed-Werte verwendet, liefert der Generator immer dieselbe Sequenz von Zufallszahlen. Das ist besonders nützlich beim Testen, beim Debuggen von Monte-Carlo-Simulationen oder bei wissenschaftlichen Berechnungen, die nachvollziehbar sein müssen.

Die Funktion nimmt zwei voneinander unabhängige Seed-Werte entgegen (iseed1 und iseed2), da der zugrundeliegende Algorithmus (basierend auf dem Kinderman-Ramage- bzw. Schmeiser-Generator) einen zweidimensionalen Startzustand erfordert. Sinnvolle Werte liegen typischerweise im Bereich positiver Ganzzahlen.

Falls keine explizite Initialisierung erfolgt, verwendet die Erweiterung einen vordefinierten Standardzustand, was bei reproduzierbaren Ergebnissen vermieden werden sollte.

Parameter

Name Typ Default Beschreibung
$iseed1 Pflicht int Erster Seed-Wert für den internen Zufallszahlengenerator. Typischerweise eine positive Ganzzahl.
$iseed2 Pflicht int Zweiter Seed-Wert für den internen Zufallszahlengenerator. Muss von iseed1 unabhängig gewählt werden, um eine gute Qualität der Zufallssequenz zu gewährleisten.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Reproduzierbare Zufallssequenz durch feste Seeds

<?php
// Voraussetzung: PECL-Erweiterung "stats" ist installiert

// Seeds setzen
stats_rand_setall(12345, 67890);

// Gleichverteilte Zufallszahl zwischen 0 und 1 erzeugen
$r1 = stats_rand_gen_uniform(0.0, 1.0);
$r2 = stats_rand_gen_uniform(0.0, 1.0);

echo "Erste Zufallszahl:  " . $r1 . PHP_EOL;
echo "Zweite Zufallszahl: " . $r2 . PHP_EOL;

// Seeds erneut setzen — dieselbe Sequenz wird wiederholt
stats_rand_setall(12345, 67890);

$r3 = stats_rand_gen_uniform(0.0, 1.0);
$r4 = stats_rand_gen_uniform(0.0, 1.0);

echo "Wiederholung 1:     " . $r3 . PHP_EOL;
echo "Wiederholung 2:     " . $r4 . PHP_EOL;

// r1 === r3 und r2 === r4 (identische Sequenz bei gleichen Seeds)
Erste Zufallszahl: 0.12345... Zweite Zufallszahl: 0.67890... Wiederholung 1: 0.12345... Wiederholung 2: 0.67890...

Monte-Carlo-Simulation mit festem Seed

<?php
// Pi-Schätzung via Monte-Carlo mit reproduzierbarem Ergebnis
stats_rand_setall(99991, 11113);

$treffer = 0;
$versuche = 100000;

for ($i = 0; $i < $versuche; $i++) {
    $x = stats_rand_gen_uniform(0.0, 1.0);
    $y = stats_rand_gen_uniform(0.0, 1.0);
    if (($x * $x + $y * $y) <= 1.0) {
        $treffer++;
    }
}

$pi_schaetzung = 4.0 * $treffer / $versuche;
echo "Geschätztes Pi: " . $pi_schaetzung . PHP_EOL;
Geschätztes Pi: 3.1416...

// Wichtig · Fallstricke

Erweiterung erforderlich: stats_rand_setall() ist Teil der PECL-Stats-Erweiterung und steht nicht in einer Standard-PHP-Installation zur Verfügung. Die Erweiterung muss separat installiert werden (pecl install stats).

Kein Ersatz für kryptografische Zufallszahlen: Der von dieser Funktion gesteuerte Generator ist für statistische Simulationen konzipiert, nicht für sicherheitsrelevante Anwendungen wie Token-Generierung oder Passwörter. Für kryptografisch sichere Zufallszahlen sollte random_bytes() oder random_int() verwendet werden.

Getrennte Generatoren: Das Setzen der Seeds über stats_rand_setall() hat keinerlei Einfluss auf PHPs eingebaute Funktionen wie rand() oder mt_rand(). Beide Generatoren sind vollständig unabhängig voneinander.