Zufallszahlen
Re: Zufallszahlen
Hier steht fast alles was man über die Standardbibliothek wissen sollte. Es ist natürlich alles plattformunabhängig - Es ist ja schließlich die Standardbibliothek.
rand()
Also von randomize unter C/C++ hab ich noch nie was gehört. Nimm lieber srand():
srand()
Und als Wert zum initialisieren nimm am Besten die aktuelle Zeit:
time()
Eigentlich wäre das auch was für die FAQ...
rand()
Also von randomize unter C/C++ hab ich noch nie was gehört. Nimm lieber srand():
srand()
Und als Wert zum initialisieren nimm am Besten die aktuelle Zeit:
time()
Eigentlich wäre das auch was für die FAQ...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Zufallszahlen
Hatte ich mal in einem C++-Programm verwendet und hatte super Dienste geleistet.Also von randomize unter C/C++ hab ich noch nie was gehört.
Das Programm lief aber soweit ich weiß nur auf einem Windowsrechner (anderes konnte ich nicht testen).
Achja: Ich benutze den gcc.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: Zufallszahlen
randomize() ist auch wieder so eine Windowsfunktion, bei der Microsoft so tut, als ob sie zum Standard gehören würde...Dirty Oerti hat geschrieben:Hatte ich mal in einem C++-Programm verwendet und hatte super Dienste geleistet.Also von randomize unter C/C++ hab ich noch nie was gehört.
Das Programm lief aber soweit ich weiß nur auf einem Windowsrechner (anderes konnte ich nicht testen).
Achja: Ich benutze den gcc.
Und randomize() ruft sowieso wieder die Standardfunktionen srand() und rand() auf.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
Re: Zufallszahlen
Also ist randomize nur eine Zusammenfassung der beiden Befehle?Kerli hat geschrieben: randomize() ist auch wieder so eine Windowsfunktion, bei der Microsoft so tut, als ob sie zum Standard gehören würde...
Und randomize() ruft sowieso wieder die Standardfunktionen srand() und rand() auf.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Zufallszahlen
Hm...
was ist dann random()?
Ich brauch dazu keine zusätzlichen Header einbinden.
Es funktioniert auf Linux und auf Windows. (Soweit ich weiß)
Ist random() das gleiche wie rand() ?
Was etwas "ungünstig" ist:
Die Zufallsverteilung ist trotzdem nicht unbedingt super.
Eine 0 zu bekommen ist schon recht schwer.
Was ich noch überprüfen müsste: Ob bei jedem Aufruf andere Zufallszahlen generiert werden. Hatte das nämlich mal, dass immer die gleichen generiert wurden.
MfG
Daniel
was ist dann random()?
Ich brauch dazu keine zusätzlichen Header einbinden.
Es funktioniert auf Linux und auf Windows. (Soweit ich weiß)
Ist random() das gleiche wie rand() ?
Was etwas "ungünstig" ist:
Die Zufallsverteilung ist trotzdem nicht unbedingt super.
Eine 0 zu bekommen ist schon recht schwer.
Was ich noch überprüfen müsste: Ob bei jedem Aufruf andere Zufallszahlen generiert werden. Hatte das nämlich mal, dass immer die gleichen generiert wurden.
MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: Zufallszahlen
hatte mal eine Gleichung die die zzahl verkleinerte ohne random()%50. so wurden die zahlen besser verteilt und die cange auf eine 0 sind deutlich gestiegen. aber leider hat es nicht funktioniert. habe die Zahl nicht mal in unsigned long gebracht, beim berechnen.Eine 0 zu bekommen ist schon recht schwer.
werde mal wieder ein paar mögliochkeiten ausprobieren bi ich eine akzeptable lösung habe.
Weis jemand noch irgend eine andere zahl die ähnlich wie time() ist?
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: Zufallszahlen
Lass mich raten, du rufst die Funktion randtime() in einer Schleife auf? Wenn das so wäre, wäre dann das seltsame verhalten erklärbar. rand() ist nämlich keine funktion, um ZUFALLS zahlen zu erzeugen (dazu müsstest du von /dev/random lesen). rand() gibt nämlich PSEUDOzufallszahlen aus.aqe89 hat geschrieben:Mein Problem ist mit diesen Funktionen, dass die Zufallszahlen immer aufsteigend sind.
Zahl Diff
10533
10565 . 32
10601 . 36
10637 . 36
10670 . 33
.....
11176
11212 . 36
11248 . 36
11287 . 39
Ich finde das ein bisschen komisch.
Habe es 2 mal ausprobiert, sind immer aufsteigend aber andere Zahlen, aber immer ähnliche Differenzen immer zwischen 32 und 39.
Es liegt wahrscheinlich an der umrand Funktion, hatte dort mal eine anderen Lösung, gab aber immer einen Integer-Überlauf.
Weiss da jemand eine alternative? Bei Linux könnte man ja noch getpid() rein nehmen. aber bei Windows.
Code: Alles auswählen
unsigned long randtime() { unsigned long randome; long min=10000, max=12000; srand(time(NULL)); randome = umrand(min, max); printf("%d msec\n",randome); return randome; } unsigned long umrand( long min, long max) { unsigned long random=0; unsigned long rnd = max - min + 1; random=rand()%rnd+min; return random; }
Anscheinend ist die Implementierung deiner Version ziemlich schwach.
Nun, aber jetzt zum Grund: Wenn du jedes mal nur randtime() aufrufst, wird jedes mal der seed neu initialisiert, und dann nur die erste Zufallszahl abgefragt. Anscheinend gibt der Algorithmus für die erste Zahl eine Zahl aus, die dem Seed sehr ähnlich ist.
Um wirklich halbwegs zuverlässige Zufallszahlen zu erzeugen, müsstest du nur _ein_ mal den seed mit srand() initialisieren, z.B. in der main() funktion. Versuchs mal.
Übrigens, ich hoffe die Zahlen werden nicht zur Verschlüsselung verwendet, denn rand() liefert eben nichtmal Zufallszahlen, sondern Zahlen die für einen Menschen zufällig aussehen. Das bedeutet, vielleicht sind diese Zahlen vorhersagbar.
Haters gonna hate, potatoes gonna potate.
Re: Zufallszahlen
Soweit ich es aus den darüber gefunden Informationen sagen kann, ist es eine Zusammenfassung dieser Befehle und dabei wird srand mit der Zeit von einem Dos-Timer oder so etwas ähnlichem aufgerufen.dani93 hat geschrieben:Also ist randomize nur eine Zusammenfassung der beiden Befehle?
Der übliche Weg ist:
Code: Alles auswählen
#include <cstdlib>
#include <ctime>
//...
srand(time(NULL));
int random_0_to_19 = rand()%20;
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Zufallszahlen
Das führte bei mir unter Windows dazu, dass ich bei jedem Programmaufruf immer die gleichen Zufallszahlen in der gleichen Reihenfolge hatte.Um wirklich halbwegs zuverlässige Zufallszahlen zu erzeugen, müsstest du nur _ein_ mal den seed mit srand() initialisieren, z.B. in der main() funktion. Versuchs mal.
Also z.B. immer 3,6,1,9,4,2,5,...
Nein. Das liefert Zahlen von 0 bis 19.Kerli hat geschrieben:Code: Alles auswählen
int random_1_to_20 = rand()%20;
*edit* Ah, schon ausgebessert
Zuletzt geändert von Dirty Oerti am Do Jul 17, 2008 5:44 pm, insgesamt 1-mal geändert.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: Zufallszahlen
Ich weiß, aber du warst anscheinend schneller mit dem Antworten als ich mit dem editierenDirty Oerti hat geschrieben:Nein. Das liefert Zahlen von 0 bis 19.Code: Alles auswählen
int random_1_to_20 = rand()%20;
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
