2016-05-23 13 views
-4

Ich weiß, dass wir in C können wir Rand() verwenden, um Zufallszahlen zu generieren, und verwenden Sie Srand(), um Samen festzulegen. Allerdings möchte ich jetzt einen unabhängigen Zufallsgenerator (wie eine Variable, oder definieren Sie eine Klasse).Unabhängiger Zufallsgenerator in C


durch unabhängigen Zufallszahlengenerator meine ich: im Programm gibt es Zufälligkeit mit mehreren Teilen. Wenn ich srand() verwende, um den Seed in einem Teil zu ändern, wäre die Zufälligkeit in anderen Teilen betroffen. Deshalb möchte ich, dass eine unabhängige Struktur die Zufälligkeit kontrolliert. Ich sah dies:

unsigned long next=1; 
int rand(void) /* NOT RECOMMENDED (see text) */ 
{ 
    next = next*1103515245 + 12345; 
    return (unsigned int)(next/65536) % 32768; 
} 
void srand(unsigned int seed) 
{ 
    next=seed; 
} 

Gibt es bessere Möglichkeiten?

+1

Was meinen Sie mit "unabhängigen Zufallsgenerator"? Bitte erläutern. –

+1

Haben Ihre Recherchen nichts zu diesem viel diskutierten Thema gebracht? –

+0

Wenn Sie echte Zufallszahlen wünschen, benötigen Sie teure Hardware. –

Antwort

0

Das Konzept Sie beschreiben, wird manchmal Zufallsströme genannt oder Random-Synchronisation.

Während Sie leicht etwas auf eigene Faust bauen könnte, empfehle ich die Gnu Scientific Library, die viele verschiedene hochwertige PRNGs und auch eine gute abstrakte Schnittstelle, die in diesem Zufallsstrom -Einstellung ist einfach zu bedienen hat.

Der obige Link enthält ein Beispiel, in dem ein RNG-Objekt für die weitere Verwendung erstellt wird. In Ihrem Fall würden Sie mehrere zufällige Streams erstellen und diese in Ihren verschiedenen Teilen des Codes verwenden. Jeder Zufallsstrom wird daher nur dann modifiziert (interner Zustand), wenn genau dieser Zufallsstrom aufgerufen wurde (und unabhängig von den Verwendungen der anderen).

Verwandte Themen