Erzeugen eines Zufalls
-
Hi !
Kann mir einer sagen wie ich ein vom Zufall abhängiges Ergebnis erzeuge, z.B. eine Zufallszahl ? random_shuffle() würfelt zwar zufällig durcheinander, aber bei gleicher Eingabe kommt auch immer dasselbe raus. Wie krieg ich ein Ergebnis, dass ich nicht vorhersagen kann ?
Hendrik
-
benutze mal die "Suchen"-funktion
das topic war schon oft
-
Guter Tip !
Aber wieso ist srand() ein void-Typ und kein int- oder float- oder double-Typ ?
Und was bewirkt randomize() ?Ich hab das jetzt ungefähr so versucht:
#include <iostream.h> #include <cstdlib.h> int main () { randomize(); int i=srand(); cout<<i<<endl; return 0; }
Ich kapiers nur nicht
-
srand() setzt den Random-Startwert. rand() holt dir dann einen ganzzahligen Zufallswert...
-
z.B.
srand(unsigned(time(0)); int r = rand();
-
Folge doch einfach mal diesem Link:
FAQ - ANSI CDer bringt dich zu den C-FAQs wo du schöne Beiträge zum Thema Zufallszahlen findest.
-
man sollte aber nicht M$ rand() nehmen
das ist Lineare congruent aber
ok... es wird alles in unsigned Long gerechnet
z=(seed*a+b);
und dann!!!
z=z>>16;//hmmmmmmmm
z=z%RAND_MAX-1
-
binde am besten die time.h ein und im Programm kannst .
Diese headerfile mist nämlich die vergangenen sec. seit 1980 glaub ich.
Du dann eine zufallszahl
z.b. so machen:int zufall;
int zufall=time(0)%5/* Modula ist gut zum verwenden wenn du dich für einen best. berreich beschraenken willst*/
cout<<zufall;
-
das ist unsinn
1%5=1
2%5=2
die periode ist dann zb 5 und die zahlen sind zufaellig wie vorgaenger u nd nachfolger
-
Nein, time mist die vergangenen sec. seit 1980 und dann kommt das Modulo
wenn du das z.b. nur ein mal aufrufst dann ist das zufall genug
-
was ist den n%5 und (n+1)%5 ?
das erste ist halt z und das zweite z+1 oder??? z-4???
-
Ich will dem typen der das Thema auf gemacht hat nur helfen und der will eben nur eien zufallszahl dafür eignet sich halt AUCH die time.h was ihm vielleicht besser gefällt hier ein bsp.:
#include<iostream.h>
#include<time.h>int main()
{
int d=time(0)%5;
cout<<d;return 0;
}
-
so dann mal aus NR
//! seed mus global vor begin initialisiert werden double randomquickndirty() { z=(seed*106+1283)%6075; seed=z; return static_cast<double>(z)/6075.0; }
ich hab zwar keine ahnung was sowas helfen soll aber fuer nich notwendige zufaelligkeit geht auch rand();
oderdouble rand() { return 0.5; }
-
was bitte spricht gegen rand() ?
es ist nicht perfekt (bei weitem nicht) aber immer noch um laengen besser als ein time()%x
oder sonstige Sachen die sich so einfach verwenden lassen. (ohne externe Lib)
-
das das M$ rand() nur die random stellen benutzt die am wenigsten random sind?
-
Genau! Einige Zahlen sind ja auch zufälliger als andere und ich bin auch gleicher als du
Naja jedenflals früüüüher in der Schule haben wir mal nen Test aka "Chaos-Theorie" gemacht mit rand() und es kamen so ziemlich alle Zahlen ziemlich gleich oft dran.
War allerdings mit Turbo C++.
-
suche mal ueber alle foren nach rand() und zufall
dann lies mal nen bissel ueber die zufallsgeneratoren
und alles wird klarer.