Zufallszahlen.
-
Hallo . Ich habe den Artikel aus dem C++ Magazin gelesen : http://magazin.c-plusplus.net/artikel/A%20Random%20Article%3A%20Die%20Mathematik%20hinter%20den%20Zufallszahlen
Meine Frage ist villeicht eine Anregung zur Diskusion. Wenn man in c++ z.B. rand() liefert die Funktion ja einen Zahlenwert aus dem bereich 0 bis MAX_RAND zurück.Das Problem ist man braucht doch eine Funktion die bei gleichen startwerten unterschiedliche ausgangswerte liefert. allerdings ist das nicht eine funktion oder? denn eine funktion liefert für einen werte immer den gelcieh wert zurück. also wie soll das gehen. und dann kann man überhaupt zufallszahlen generierne.
-
dercooleauswandere schrieb:
Das Problem ist man braucht doch eine Funktion die bei gleichen startwerten unterschiedliche ausgangswerte liefert. allerdings ist das nicht eine funktion oder? denn eine funktion liefert für einen werte immer den gelcieh wert zurück. also wie soll das gehen.
naja, funktionen in C sind nun mal keine funktion, wie du sie aus'm matheunterricht kennst.
-
Die Funktion rand ist eine Funktion in Abhängigkeit eines Zustands. Im Falle von rand ist dieser Zustand halt intern, aber dieser könnte ja auch ein Argument sein (z.B. rand_r).
-
dercooleauswandere schrieb:
Das Problem ist man braucht doch eine Funktion die bei gleichen startwerten unterschiedliche ausgangswerte liefert.
Genau das tut rand() doch: mit srand() setzt du den Startwert. Bei gleichem Startwert liefern 2 Aufrufe von rand() die gleichen Ausgaben.
Versuchs mal:srand(42); cout << rand() << '\n'; srand(42) cout << rand() << '\n';
und dann kann man überhaupt zufallszahlen generierne.
Nein, echte Zufallszahlen sind auf diese Art & Weise nicht zu erzeugen. Deswegen nennt man sie ja auch Pseudozufallszahlen. Um echte Zufallsgeneratoren herzustellen wuerdest du entsprechende Hardware benoetigen (die dann z. B. den atomaren Zerfall von Molekuelen misst).
-
Wenn man bei srand immer denselben Wert eingibt, würfelt rand() auch immer dieselbe "Zufallsfolge" aus.
-
Tyrdal schrieb:
Wenn man bei srand immer denselben Wert eingibt, würfelt rand() auch immer dieselbe "Zufallsfolge" aus.
Was in einigen Fällen durchaus gewünscht sein kann, sei es fürs debuggen oder bei einem Mapgenerator: anstatt die ganze Map abzuspeichern bzw. zu versenden nimmt man einfach nur den Startwert und jeder kann sich das Endergebnis selbst zusammenschustern