PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallszahlen/Intervalle



derSpatz
19-04-2006, 15:00
Hallo Zusammen;
:confused:
hab da ein kleines Problem,

ich brauche für meine Diplomarbeit Zufallsintervalle von der Länge 5, d.h. Zufallszahl-5 ... Zufallszahl+5.
Mein Programm rechnet dann innerhalb dieser 11(!) Zahlen Werte aus. Das Ausrechnen funktioniert auch ganz gut, aber wie erzeuge ich diese Zufallszahlen. Brauche so ca. 1000 Stück davon. Und das nicht ab 1 sondern ab Phi(p*q*r)/2.

Kann mir da jemand helfen :rolleyes:

Grüße Spatz

bischi
19-04-2006, 15:21
Wenn du wirklich gute Zufallszahlen brauchst, kommst du wohl an der Aufnahme von atmosphärischem Rauschen nicht vorbei :D

Ne - Spass beiseite: Nahezu jede Sprache (hast du glaub ich nicht angegeben) bietet irgendwo in der Mathe-Library einen Pseudo-Zufallszahlengenerator an (heisst meist random). Also sochlche Zahlen generieren (zwischen 0 und 1) und danach mit 5 multiplizieren. Kannst danach noch 3 addieren - dann hast du Zufallszahlen von 3 bis 8.

MfG Bischi

derSpatz
20-04-2006, 12:28
Merci,

hab alles gefunden. Das Ding heißt srand(Startwert). Hat den kleinen Nachteil, dass diese "Zufallsgenerator" bei gleichem Startwert immer die gleiche "Zufallszahl" erzeugt.
Hab das Problem durch eine Schleife gelöst, die immer den letzten "zufallswert" als neuen Startwert nimmt.
Kleiner Tip.
Oft sieht man, dass zur Änderung des Startwerts die Zeit im Rechner benutzt wird. Das hat den enormen Nachteil, dass bei Rechnungen in der gleichen Sekunde der gleiche Startwert verwendet wird.... :-(

Caveman
20-04-2006, 12:34
Oft sieht man, dass zur Änderung des Startwerts die Zeit im Rechner benutzt wird. Das hat den enormen Nachteil, dass bei Rechnungen in der gleichen Sekunde der gleiche Startwert verwendet wird.... :-( Die Initialisierung solltest Du nur einmal im Programm vornehmen.
Oder hast Du das Problem, dass das Programm öfter und innerhalb einer Sekunde gestartet wird?

Edit: Schau Dir auch mal dieses Thema an: http://www.mrunix.de/forums/showthread.php?p=200686#post200686

derSpatz
20-04-2006, 12:55
Genau dieses...
Ich brauchn eine Folge von Zufallszahlen und das wird pro Sekunden mehr als einmal gemacht. Aber wie gesagt, mit der letzten Zufallszahl als neuem Startwert....

Danke für den Link... auch ne interessante Variante des Problems

bischi
20-04-2006, 12:59
Anstatt der Sekunde besser die aktuelle Millisekunde wählen - ist dann etwas "zufälliger".

MfG Bischi

Joghurt
20-04-2006, 23:03
Für den Fall, dass du statistische Analysen vorhast, solltest du vielleicht nicht den RNG der C-Library nehmen.

Ich würde dir den Mersenne Twister (http://de.wikipedia.org/wiki/Mersenne_Twister) empfehlen. Er ist erprobt und hat für einen Pseudozufallszahlengenerator eine sehr gute Statistik (will heißen, die Werte sind wirklich ziemlich gut zufällig, besser als die meisten anderen Pseudo-RNGs)

Eine Implementation in C ist hier: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c

RapidMax
22-04-2006, 21:13
Joghurt hat recht, ich würde dir ebenfalls empfehlen einen besseren Pseudo Random Number Generator (PRNG) zu verwenden. Aber auch diese Generatoren kranken an dem Problem eines guten Initialisierungswert. Unter Linux kann ich dir dafür die Verwendung von /dev/random empfehlen. Das liefert sehr gute Werte, welche aus zufälligen Hardware-Ereignissen gewonnen werden. Ansonsten kannst du auch auf die Random-Funktionen von OpenSSL zugreifen.

Gruss, Andy

Apropos: Ich habe zum Thema Zufallszahlen einmal eine Projekt-Arbeit (http://rapidmax.homelinux.net/src/random/) gemacht.