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 !!
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.
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):
Beachten Sie, dass das Seering des Mersenne Twisters, wie hier für Demonstrationszwecke gemacht, nicht perfekt ist, siehe zum Beispiel hier .
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. Ссылка
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
Tags und Links c c++ random unsigned-long-long-int