srand48

srand48

srand48 ist eine Funktion aus der Programmiersprache C, die einen Zufallszahlengenerator mit einem Startwert initialisiert. Sie gehört zur rand48-Familie und liefert gleichmäßig verteilte Pseudozufallszahlen auf Basis eines 48-Bit-Algorithmus.

srand48 ist eine Funktion in der Programmiersprache C. Sie setzt den Startwert — den sogenannten Seed — eines Zufallszahlengenerators. Ein Zufallszahlengenerator ist ein Algorithmus, also eine Rechenvorschrift, die scheinbar zufällige Zahlen erzeugt. Das Wort „scheinbar“ ist wichtig: Die Zahlen sehen zufällig aus, werden aber nach einer festen mathematischen Formel berechnet. Man nennt sie deshalb Pseudozufallszahlen. srand48 gehört zur sogenannten rand48-Familie, einer Gruppe verwandter Funktionen, die alle denselben internen Rechenweg nutzen.

Der Seed: Warum der Startwert alles entscheidet

Weil der Algorithmus deterministisch ist — also bei gleicher Eingabe immer dieselbe Ausgabe liefert —, erzeugt derselbe Seed immer dieselbe Folge von Zahlen. Das klingt nach einem Fehler, ist aber oft ein Vorteil. In der Wissenschaft zum Beispiel will man Experimente reproduzieren können: Wer denselben Seed setzt, bekommt dieselben „Zufalls“-daten und kann ein Ergebnis exakt nachvollziehen.

Wenn echte Unvorhersehbarkeit gefragt ist, nimmt man als Seed häufig die aktuelle Uhrzeit. Die ändert sich jede Sekunde, also startet der Generator jedes Mal an einer anderen Stelle. Ein häufiger Anfängerfehler: Man ruft srand48 in einer Schleife auf, anstatt es einmal zu Beginn des Programms zu setzen. Dann wird der Generator immer wieder neu gestartet — und die Zufälligkeit geht verloren.

Der 48-Bit-Algorithmus dahinter

Der Name „rand48“ verweist auf die interne Arbeitsweise. Der Generator hält einen Zustand von 48 Bit — das ist eine 48-stellige Binärzahl, also eine Zahl aus Nullen und Einsen. Bei jedem Aufruf wird dieser Zustand nach einer festen Formel umgerechnet, und aus dem Ergebnis wird die nächste Zufallszahl abgeleitet. Das Verfahren heißt linearer Kongruenzgenerator. Es ist schnell und benötigt wenig Speicher, gilt aber als zu schwach für Anwendungen, bei denen Sicherheit zählt.

srand48 selbst erzeugt keine Zufallszahl — es bereitet den Generator nur vor. Die eigentlichen Zahlen liefern Schwesterfunktionen: drand48 gibt eine Kommazahl zwischen 0 und 1 zurück, lrand48 eine ganze Zahl. srand48 ist damit der Schalter, den man umlegt, bevor die Maschine läuft.

48 Bit bedeuten, dass der interne Zustand rund 281 Billionen verschiedene Werte annehmen kann. Das klingt gewaltig, reicht aber nicht für kryptografische Zwecke — also für alles, was mit Verschlüsselung oder Sicherheit zu tun hat. Ein Angreifer, der das Verfahren kennt, kann bei genug bekannten Ausgaben den Seed rekonstruieren und alle weiteren Zahlen vorhersagen.

Wo srand48 in der Praxis auftaucht

srand48 stammt aus der POSIX-Norm, einem Standard für Unix-artige Betriebssysteme wie Linux oder macOS. Es ist dort Teil der Standardbibliothek und damit in nahezu jedem C-Programm verfügbar, das auf solchen Systemen läuft. Unter Windows fehlt die Funktion in der Regel; dort existieren andere Pendants.

In der Praxis begegnet man srand48 vor allem in wissenschaftlichen Simulationen, in der Spieleentwicklung und in der Statistik. Wer etwa eine Monte-Carlo-Simulation schreibt — eine Methode, bei der man durch viele Zufallsexperimente Näherungswerte berechnet —, nutzt solche Generatoren massenhaft. Geschwindigkeit ist dabei wichtiger als kryptografische Stärke, weshalb rand48 eine verbreitete Wahl ist.

In modernen Programmen trifft man srand48 seltener an als früher. Neuere Standards wie C++11 bieten eine ganze Bibliothek an Generatoren mit klar definierten Eigenschaften. Für sicherheitskritische Anwendungen — Passwörter, Tokens, Verschlüsselungsschlüssel — sind Funktionen wie getrandom unter Linux oder CryptGenRandom unter Windows die richtige Wahl. srand48 hat dort nichts zu suchen.

Subscribe free. Unsubscribe the second it sucks.

High-signal news across AI, business, UX, and tech. Every morning.