Mal wieder Zufallszahl generieren
-
Eine Maschine arbeitet immer nur vorgegebene Werte ab. Deswegen gibt es NIEMALS wahre Zufälle.
-
deshalb habe ich ja auch das "wirkliche" in anführungszeichen geschrieben
mit 'wirkliche' meine ich ausreichend gute.
-
Hallo
Zum Thema Zufallszahlen gibt es auch einen guten Magazinartikel hier im Forum.
bis bald
akari
-
Ein Tipp,
wenn du die Verteilung der Zufallszahlen ändern willst führe einfach eine arithmetische Operation auf einer Menge von Zufallszahlen von rand() aus. Wenn man beispeilsweise die letzten 100 (oder 1000) Zahlen von rand() addiert, nähert man sich einer Normalverteilung.
Alternativ kann man die letzten X Zufallszahlen multipizieren, dividieren, oder subtrahieren.
Zufallszahlen sind beispielsweise in der Kryprografie oder Signalverarbeitung interresant. Denn je "zufälliger" ein verschlüsseltes Signal ist, desto eher wird der Schlüssel nicht geknackt. Da das Ganze aber schnell bös mathematisch wird, verweise ich hier einfach mal die Wikipedia. http://de.wikipedia.org/wiki/Pseudozufall. Nur soviel sei noch dazu gesagt, es gibt mathematische Funktionen (man steckt eine Zahl hinein und bekommt eine andere heraus) die durchaus "zufälliger" Natur sind.
-
du könntest auch probieren, ob der compiler deiner wahl schon die neuen random-facilities implementiert

#include <tr1/random> //zumindest mit g++ using namespace std; int main () { mt19937 mersenne_twister(time(0)); uniform_int_distribution<unsigned> random(0, 10); //mit g++: uniform_int<unsigned> int r = random(mersenne_twister); }PS:
www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2079.pdf
-
sry wenn ich so dazustoße...
wie kann ich mit srand ((unsigned)time(NULL)) nen maxwert eingeben?
Brauche Zufallszahlen zwischen 0 und 1... Vorschlag?
Danke
-
Xands schrieb:
sry wenn ich so dazustoße...
wie kann ich mit srand ((unsigned)time(NULL)) nen maxwert eingeben?
Brauche Zufallszahlen zwischen 0 und 1... Vorschlag?
DankeBei srand() initialisierst du nur den Zufallsgenerator - um den Zahlenbereich einzuschränken, mußt du den Rückgabewert von rand() passend zurechtschneiden (Umwandeln in double und Division durch RAND_MAX sollte ausreichen).
-
Kann es sein, dass das Problem des OP lediglich die wiederholte Verwendung von srand ist?!
-
LordJaxom schrieb:
Kann es sein, dass das Problem des OP lediglich die wiederholte Verwendung von srand ist?!
Das Hirn will doch noch zufälligere Zahlen generieren.
-
klingt nach ner verflixt guten Sache.
d.h.:
...
srand ( (unsigned)time (0));
Variable=rand()%1+0; /*für Zahlen zwischen 0 und 1*/
...seh ich das richtig?
-
Xands schrieb:
klingt nach ner verflixt guten Sache.
d.h.:
...
srand ( (unsigned)time (0));
Variable=rand()%1+0; /*für Zahlen zwischen 0 und 1*/
...
seh ich das richtig?nein.
damit bekommst du zahlen zwischen 0 und 0.
also nicht allzu viele
wenn, dann var = (double)rand()/RAND_MAX
für 0 <= var <= 1

-
Für alle die dies interresiert.
Manche Zufallsgeneratoren basieren auf mathematische Funktionen, ähnlich der Funktion: f(n+1) = (5 * f(n) + 7) % 11
Der Seed-Wert könnte man hier als f(0) setzen. Wäre dieser Wert 6, wäre die erste Zufallszahl f(1) = (5 * f(0) + 7) % 11 = (5 * 6 + 7) % 11 = 37 % 11 = 4. Die nächste Zufallszahl wäre dementsprechend f(2) = (5 * f(1) + 7) % 11 = (5 * 4 + 7) % 11 = 27 % 11 = 5.
Ich hoffe damit ist es ein wenig klarer was ein Seed-Wert sein kann, nämlich der Startwert für die Funktion, welche (Pseudo)Zufallszahlen zurückliefert.