Große Zufallszahlen in C / C ++ erhalten

7

Standard rand() function gibt Zahlen, die nicht groß genug für mich sind: Ich brauche unsigned long long one. Wie bekommen wir wirklich große Zufallszahlen? Ich habe versucht, eine einfache Hash-Funktion zu ändern, aber es ist zu big , dauert zu lange, um zu laufen und produziert niemals Zahlen, die kleiner als 1e5 sind !!

    
ForceBru 23.01.2015, 17:47
quelle

6 Antworten

9

Hier ist eine portable C99-Lösung, die eine zufällige 64-Bit-Zahl zurückgibt:

%Vor%

Erklärung: rand() liefert ganze Zahlen im Bereich 0 bis RAND_MAX und RAND_MAX garantiert nur mindestens 32.767 (15 zufällige Bits). long long hat garantiert 64 Bits, kann aber größer sein.

    
nwellnhof 23.01.2015, 18:06
quelle
15

Sie können dies leicht mit std::uniform_int_distribution<unsigned long long> durchführen.

Einfacher Beispielcode (aus hier , modifiziert, um unsigned long long zu verwenden):

%Vor%

Beachten Sie, dass das Seering des Mersenne Twisters, wie hier für Demonstrationszwecke gemacht, nicht perfekt ist, siehe zum Beispiel hier .

    
Baum mit Augen 23.01.2015 17:53
quelle
2

Wenn Sie nur unsigned long long aus dem von rand () zurückgegebenen Wert erzeugen wollen und die Eigenschaften des Ergebnisses nicht interessieren, betrachten Sie die folgende Funktion, die Compilerversion und plattformunabhängig sein muss (weil keine "magischen Zahlen" verwendet werden) ):

%Vor%

Wenn Sie jedoch eine Folge von Zufallszahlen mit bestimmten vorgegebenen Eigenschaften wünschen, sollten Sie in bestimmten Handbüchern oder Mathebüchern nachsehen. Z.B. Ссылка

    
VolAnd 24.01.2015 22:32
quelle
0

Sie haben nicht nach einem bestimmten Betriebssystem gefragt und die Antworten hier sind wirklich gut, aber unter Linux (und wahrscheinlich auch auf anderen Betriebssystemen) können Sie auch von einem zufälligen Gerät lesen.

Beispiel:

%Vor%

Geschrieben auf Handy, kann Bugs haben. : P

    
boramalper 24.01.2015 11:56
quelle
0

Sie können auch die Boost-Bibliothek verwenden (aus dem Link ) ):

%Vor%     
Seth 09.12.2016 20:42
quelle
-1

versuche das:

%Vor%     
HuaLiu01 28.03.2016 18:35
quelle