random
-
#include <stdio.h> #include <errno.h> #include <stdlib.h> #include <time.h> /* get integer random number in range a <= x <= e */ int irand(int a, int e) { double r = e - a + 1; return a + (int)(r * rand()/(RAND_MAX+1.0)); } int main() { char result = 0; srand( time(0)); result = (char)irand(0, 255); result = (char)irand(0, 255); return 0; }
warum ist die erste zufalls immer gleich wenn ich das programm neu starte?
-
Der erste Wert von rand() hängt ja direkt von srand(time(0)), also der Zeit (in Sekunden) ab. Da du aber eben diesen Wert durch eine ziemlich große Zahl (RAND_MAX+1) teilstm ändert sich dieser Wert halt nicht mehr jede Sekunde, sondern erst ungefähr alle (RAND_MAX+1)/255 Sekunden wieder.
-
gibts da ne schoenere loesung? waere schon fein wenn sich der wert alle sekunden aendert!
-
Also ich hab das folgendermaßen gelöst:
#include "windows.h" int GetRandomNumber(int Min, int Max) { srand(GetTickCount()); return rand()%(Max-Min+1)+Min; }
-
jedes mal srand aufrufen ist aber nicht ideal!
-
Das garantiert dir aber, dass deine Zufallszahl auch wirklich jedes mal wieder ZUÄFFLIG ist.
-
8daff schrieb:
Das garantiert dir aber, dass deine Zufallszahl auch wirklich jedes mal wieder ZUÄFFLIG ist.
Nö.
-
Ein guter Artikel zu rand():
http://eternallyconfuzzled.com/arts/jsw_art_rand.aspxDie Beiträge von 8daff kann man getrost ignorieren: Falsch, off-topic und nicht gut die Lösung ist.
-
sollte srand net einmal aufgerufen werden ? oder verwechsle ich da was -.- ?
-
Stelfer schrieb:
sollte srand net einmal aufgerufen werden ? oder verwechsle ich da was -.- ?
Aus dem Beispielcode von ruediger geht nicht hervor, dass er die Funktion beispielsweise mehrere hundert mal aufrufen will. Außerdem war seine Frage, warum die erste Zufallszahl seines Programmes, immer die gleiche ist.
TactX schrieb:
Die Beiträge von 8daff kann man getrost ignorieren: Falsch, off-topic und nicht gut die Lösung ist.
Man könnte meinen du hast nicht 8daff gemeint, sondern deinen eigenen Beitrag? Dabei hast du aber vermutlich vergessen, auch die inkorrekte Grammatik zu erwähnen.
-
CHi18 schrieb:
Man könnte meinen du hast nicht 8daff gemeint, sondern deinen eigenen Beitrag?
Ganz schlechter Flameversuch
CHi18 schrieb:
Dabei hast du aber vermutlich vergessen, auch die inkorrekte Grammatik zu erwähnen.
-
Auf http://www.henkessoft.de/C++/Cpp_school/_templates.htm gibts eine Funktion
Random_aus_stdlib_geklaut.
Dann kannst du sie dir vielleicht zurechtproggen.
-
Carmack schrieb:
Auf http://www.henkessoft.de/C++/Cpp_school/_templates.htm gibts eine Funktion
Random_aus_stdlib_geklaut.
Dann kannst du sie dir vielleicht zurechtproggen.Wozu sollte er? Das Problem ist nicht die Implementierung von rand() sondern dessen Benutzung.
-
Die Benutzung ist das Problem, weil sie so implementiert wurde.
-
Nochmal: Wie soll die Klasse Random_aus_Stdlib_geklaut das Problem des OP hier lösen?
-
Er könnte sich ja eine eigene Zufallsfunktion auf Basis von "Random_aus_Stdlib_geklaut" schreiben.
-
Du hast leider das Problem des OP nicht verstanden.
-
Ich hab es so verstanden, dass er jede Sekunde eine neue Zufallszahl, die immer anders ist, will.
Also schreibt er sich eine Hüllfunktion um rand(), die das erledigt.
Dann kann er doch gleich eine ganz neue Funktion schreiben.Oder wie hat er es gemeint?
-
Das Problem ist die "Hüllfunktion". Das Problem "Hüllfunktion" löst man nicht wenn man random() selbst implementiert, weil das Problem nicht rand() ist.
-
Die andere Lösung könnte man aber noch optimieren, v.a. da er nur char benötigt liese sich da vielleicht noch was machen