Zufallszahl ohne CRT
-
Hallo Leute. Ich möchte in meinem C++ programm einen Zufallszahl generieren, jedoch ohne CRT funktionen wie srand() und rand()
Gibt es da gute alternativen? (z.B. mit WinAPI)
Danke.
-
tortillaking schrieb:
Hallo Leute. Ich möchte in meinem C++ programm einen Zufallszahl generieren, jedoch ohne CRT funktionen wie srand() und rand()
Gibt es da gute alternativen? (z.B. mit WinAPI)
Danke.http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c
-
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c[/quote]
Danke! Werde mir das mal angucken.
-
tortillaking schrieb:
Hallo Leute. Ich möchte in meinem C++ programm einen Zufallszahl generieren, jedoch ohne CRT funktionen wie srand() und rand()
Gibt es da gute alternativen? (z.B. mit WinAPI)
Danke.Hast dabei zwei Probleme:
a) Pseudozufallszahlengenerator. Ich empfehle den MWC. https://www.c-plusplus.net/forum/118802-full
Passt auch, wenn Du die CRT nicht nehmen willst, biste vermutlich embeddded unterwegst und magst Code und Speicher sparen. Nee, WinAPI und embedded?b) srand(time(0)). Da kann man auf Intel/AMD prima den assemblerbefehl rdtsc nehmen.
uint64_t rdtsc(){ __asm rdtsc;//Hat früher der MS-Compiler prima geschluckt, wenn ich mich recht erinnere. }
Die anderen Güllepumpen kenne ich nicht genug. Falls kein Hardwarezufall einfach zu besorgen ist, speichere den Seed in einer Datei und imkrementiere ihn bei jeder Benutzung.
-
Die Windows Güllepumpe heisst
CryptGenRandom
https://msdn.microsoft.com/en-us/library/windows/desktop/aa379942(v=vs.85).aspx
Beispiele wie man die verwenden kann findet man problemlos im Netz.
-
volkard schrieb:
b) srand(time(0)). Da kann man auf Intel/AMD prima den assemblerbefehl rdtsc nehmen.
uint64_t rdtsc(){ __asm rdtsc;//Hat früher der MS-Compiler prima geschluckt, wenn ich mich recht erinnere. }
Besser per
__rdtsc()
intrinsic,__asm
funktioniert nur in 32-Bit Code...
-
Ist etwas am Pseudo-Zufallgenerator von Boost
http://www.boost.org/doc/libs/1_60_0/doc/html/boost_random.html
mit dem LowPart des LARGE_INTEGER vom QueryPerformanceCounter https://msdn.microsoft.com/en-us/library/windows/desktop/ms644904%28v=vs.85%29.aspx als Seed sonst nicht gut, ausser wenn
volkard schrieb:
Falls kein Hardwarezufall einfach zu besorgen ist, speichere den Seed in einer Datei und imkrementiere ihn bei jeder Benutzung.
? Verwende nämlich immer Boost.Random mit QueryPerformanceCounter als Seed als Pseudo-Zufallgenerator.
-
Warum nicht std::random_device verwenden?
-
Wieso nicht wenigstens den Thread-Titel lesen?
-
hustbaer, ich habe den Titel schon gelesen!
Ich dachte nur dass der TE nicht auf rand() zurückgreifen wollte, weil diese seinen Anforderungen bezüglich Verteilungen nicht genügt und ihn der CRT Funktionswildwuchs ala rand, rand_s, sprintf, sprintf_s,... stört. Warum sonst sollte man die CRT meiden wollen?