Zufallszahlen

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Zufallszahlen

Beitrag von Dirty Oerti » Do Jul 17, 2008 5:42 pm

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.
Das führte bei mir unter Windows dazu, dass ich bei jedem Programmaufruf immer die gleichen Zufallszahlen in der gleichen Reihenfolge hatte.

Also z.B. immer 3,6,1,9,4,2,5,...

Kerli hat geschrieben:

Code: Alles auswählen

int random_1_to_20 = rand()%20;
Nein. Das liefert Zahlen von 0 bis 19.
*edit* Ah, schon ausgebessert :) */edit*
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.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Zufallszahlen

Beitrag von Kerli » Do Jul 17, 2008 5:44 pm

Dirty Oerti hat geschrieben:

Code: Alles auswählen

int random_1_to_20 = rand()%20;
Nein. Das liefert Zahlen von 0 bis 19.
Ich weiß, aber du warst anscheinend schneller mit dem Antworten als ich mit dem editieren :D
"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

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Zufallszahlen

Beitrag von fat-lobyte » Do Jul 17, 2008 5:45 pm

Wäre gut, wenn dus nicht jedes mal mit dem gleichen seed aufrufen würdest. Ein kleiner google.com/codesearch gibt gleich mal gute Beispiele:

Code: Alles auswählen

srand(time(0)<<getpid());
Haters gonna hate, potatoes gonna potate.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Zufallszahlen: neue idee

Beitrag von AnGaiNoR » Mi Jul 23, 2008 8:23 am

Ich hätte mal ne ganz andere Idee:

Der bereits angesprochene DOS-Counter liefert ja die Zeit seit dem Systemstart in Millisekunden.
Wenn man auf diesen Wert den Modulo-Operator anwendet, dann sollte doch eine genauso gute ufallszahl rauskommen.

PS: Diese Lösung habe ich mir beim Forumlesen ausgedacht und NICHT probiert.
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Zufallszahlen: neue idee

Beitrag von Kerli » Mi Jul 23, 2008 9:49 am

AnGaiNoR hat geschrieben:Ich hätte mal ne ganz andere Idee:

Der bereits angesprochene DOS-Counter liefert ja die Zeit seit dem Systemstart in Millisekunden.
Wenn man auf diesen Wert den Modulo-Operator anwendet, dann sollte doch eine genauso gute ufallszahl rauskommen.

PS: Diese Lösung habe ich mir beim Forumlesen ausgedacht und NICHT probiert.
Ich würde eher 'clock()' aus der <ctime> nehmen, die macht eh das gleiche, nur plattformunabhängig. Für kleine Zufallszahlen kann das durchaus ganz gut Resultate bringen (zb Würfel 1-6), Probleme wird es aber geben, wenn man oft hintereinander Zufallszahlen aus einem großen Bereich braucht, weil man dann ziemlich sicher eine Aufsteigende Zahlenfolge bekommen wird.

Ich würde einfach die normalen Funktionen 'rand()' und 'srand()' verwenden und die dann mit 'time()', 'clock()' oder irgendeiner Kombination daraus in eine einfallsreiche Formel eingebaut ;)
"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

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Zufallszahlen: neue idee

Beitrag von Dirty Oerti » Mi Jul 23, 2008 1:26 pm

AnGaiNoR hat geschrieben:Ich hätte mal ne ganz andere Idee:

Der bereits angesprochene DOS-Counter liefert ja die Zeit seit dem Systemstart in Millisekunden.
Wenn man auf diesen Wert den Modulo-Operator anwendet, dann sollte doch eine genauso gute ufallszahl rauskommen.

PS: Diese Lösung habe ich mir beim Forumlesen ausgedacht und NICHT probiert.

Keine schlechte Idee.
Für kleine Wertbereiche mit langen Pausen zwischen den einzelnen Zufalls-Abfragen sicherlich gut geeignet :)
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.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Zufallszahlen

Beitrag von fat-lobyte » Mi Jul 23, 2008 3:36 pm

Übrigens könnte man rand auch als einfache Stream Cipher verwenden. Dann wäre der Initialisierungsvector (also der Schlüssel) das was man bei srand eingibt. Er würde aus 4 Zeichen Bestehen.
Haters gonna hate, potatoes gonna potate.

Dominik
Beiträge: 381
Registriert: Mo Jul 07, 2008 9:39 pm

Re: Zufallszahlen

Beitrag von Dominik » Mo Aug 04, 2008 4:38 am

naja gibts unter c auch sowas wie "uniqid"? ist zwar keine zufall aber eindeutig und kann auch kaum jemand erraten
weis ja nicht für was ihr das braucht.
wenn ja nimmt doch diesfunktion mit nem hash zb:)
Rechtschreibefehler sind gewollt und dienen der Unterhaltung

aqe89
Beiträge: 70
Registriert: Sa Jul 05, 2008 9:36 am
Wohnort: Schweiz

Re: Zufallszahlen

Beitrag von aqe89 » Do Aug 07, 2008 12:15 pm

Danke für eure Tipps.
Tut mirt leid das ich mich erst jetzt melde.

Bei mir lag es daran das ich bei jedem Schleifendurchlauf srand neu aufgerufen wurde.
Zum gluck liegt zwischen jedem aufruf ca 10 Sekunden. so gibt es nicht 2 mal die gleiche Zahl.

Das wegen den Windowsspezifischen Funktionen konnte ich nicht testen. habe jetzt nur noch auf Linux einen Compiler.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Zufallszahlen

Beitrag von fat-lobyte » Fr Aug 08, 2008 9:55 am

aqe89 hat geschrieben:Danke für eure Tipps.
Tut mirt leid das ich mich erst jetzt melde.

Bei mir lag es daran das ich bei jedem Schleifendurchlauf srand neu aufgerufen wurde.
Zum gluck liegt zwischen jedem aufruf ca 10 Sekunden. so gibt es nicht 2 mal die gleiche Zahl.

Das wegen den Windowsspezifischen Funktionen konnte ich nicht testen. habe jetzt nur noch auf Linux einen Compiler.
Wenn du unter Linux unterwegs bist, und Kryptographisch hochwertige Zufallszahlen willst, lies doch von /dev/random. Dieser aufruf blockiert aber so lange, bis du genug Zufallszahlen hast. Wenn sie etwas weniger qualitativ sein sollen, kannst du von /dev/urandom lesen. Dort kommen dann die Zufallszahlen sofort raus.
Haters gonna hate, potatoes gonna potate.

Antworten