Urnenmodell
-
Furble Wurble schrieb:
Evtl. sollten wir da mal einen header kreieren, der Anfänger schnell auf Speed bringt, die eigentlich nur x-seitige Würfel simulieren wollen?
Es spricht ja nichts ernsthaft gegen rand für diesen Zweck.
-
Furble Wurble schrieb:
Evtl. sollten wir da mal einen header kreieren, der Anfänger schnell auf Speed bringt, die eigentlich nur x-seitige Würfel simulieren wollen?
So schlecht sind die Random-Features der
std
eigentlich nicht.std::uniform_int_distribution
ist schon intuitiver bezüglich
des gewünschten Wertebereichs als dierand()%N
-Methode und vermeidet auch das zwar geringe, aber dennoch vorhandene
Modulo-Bias, wennN
kein Teiler der Anzahl möglicher Zufallszahlen ist, dierand()
liefert (ist daher auch etwas langsamer).Eigentlich ist es nur problematisch, dass
std::random
nicht per Default eine gute Initialisierung macht, bzw. dass diese so
umständlich ist - egal ob man gehobenere Ansprüche hat, oder nur den sechsseitigen Würfel benötigt. Das widerspricht
der neuen Philosophie, die mit modernem C++ Einzug gehalten hat
-
Finnegan schrieb:
Eigentlich ist es nur problematisch, dass
std::random
nicht per Default eine gute Initialisierung macht, bzw. dass diese so
umständlich ist - egal ob man gehobenere Ansprüche hat, oder nur den sechsseitigen Würfel benötigt. Das widerspricht
der neuen Philosophie, die mit modernem C++ Einzug gehalten hatDiese Philosophie sehe ich nicht. C++ ist schöner zu benutzen, aber es macht auf jeden Fall nie implizit nicht-triviale Sachen. Die Initialisierung eines Zufallsgenerators ist aus Sicht von Leuten, die sich damit auskennen, absolut nicht-trivial (siehe dieser Thread selbst als bestes Beispiel), deswegen ist der Code dafür auch vergleichsweise schwer zu benutzen. Diese Tatsache trifft dann aber auf den Bedarf von Leuten, die sich nicht damit auskennen, und einfach nur loslegen wollen.
-
SeppJ schrieb:
Furble Wurble schrieb:
Evtl. sollten wir da mal einen header kreieren, der Anfänger schnell auf Speed bringt, die eigentlich nur x-seitige Würfel simulieren wollen?
Es spricht ja nichts ernsthaft gegen rand für diesen Zweck.
Solange es noch vorhanden ist. Es ist im Standard bereits deprecated. Kein Ahnung ob und wann es tatsächlich entfernt wird. Sollte man Anfängern nicht gleich den aktuellen Stand zeigen?
Mir scheint auch srand/rand korrekt benutzt nicht viel einfacher zu sein als uniform_int_distribution & co. Man findet halt im Netz viel mehr Beispiele zu rand.clang kennt mit c++1z "register" nicht mehr.
VS2017 kennt mit c++latest auto_ptr und random_shuffel nicht.
Die Compiler machen also Ernst.