Zufallszahlen
-
Möchte Zufallszahlen nach der linearen Kongruenzmethode erzeugen.
mein Program:1-12;
a=0;double rand(int a)
{
double m=381.0;
int b=19;
double d=0;
d=((a*b+1)%(int)m)/m;return d;
}a=(rand(a)*11)+1;
Gibt immer nur zwei aus??
-
Beim start des programms wirst du mit rand immer die selbe zufallszahlenfolge bekommen. Der Computer geht dort ja nach einem musster vor. du solltest die zufallszahl bzw rand mit der Uhrzeit verbinden weil diese mit sicherheit bei jedem programmstart anders ist.
initialisier das mit
srand(time(NULL));vielleicht hilft dir das ja weiter
#include <iostream> #include <cmath> using namespace std; int main() { srand(time(NULL)); // Zufallszahl initialisieren cout << "Zufallszahl: " << (rand()%100)+1 << endl; // Zufallszahl 0 - 100 system("Pause"); return 0; }
-
Sebbo, er schreibt einen eigenen Generator,also seine eigene rand() Funktion nach einem Algorithmus, der sich "linearen Kongruenzmethode" nennt.
-
@Titu: wieso mischt du ints und doubles?
LC macht man normalerweise mit Integers, und zwar ca. so:
const unsigned a = ...; const unsigned b = ...; const unsigned c = ...; unsigned generator(unsigned seed) { seed = (seed * a + b) % c; return seed; }Noch besser: pack es in eine Klasse, so dass du "seed" nicht immer mit rumreichen musst.
-
hmm guckt mal bitte ins Mag ... da steht dazu nen kleiner Artikel ... das ihr alle sowas wie die Suche nicht nutzen könnt kotzt schon ziemlich an.
-
Wen meinst du mit "ihr alle"?
-
hustbaer schrieb:
Wen meinst du mit "ihr alle"?
Alle, die sich angesprochen fuehlen. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
TGGC, sei ruhig, mit dir redet keiner.
-
Lass mal deinen Frust nicht an mir aus. Warum musst du immer Streit suchen? f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
hi,
anbei ein einfacher Randomgenerator, der gleichverteilte Pseudozufallszahlen nach der Lehmer'schen linearen Kongruenzmethode aus dem Interval 0..s-1 berechnet, so wie hustbaer vorgeschlagen hat:unsigned long lehmer(unsigned long s) { static unsigned long a = 1, b = 4194301, c = 2147483647, z = b; z = (a + b * z) % c ; return z % s; }Die Ganzzahl-Konstanten a,b,c können NICHT frei gewählt werden. Theorie dazu kannst du z.B. beim Altvater Donald Knuth, The Art ... Bd.3 finden. Wichtig ist, dass c eine große Primzahl ist, damit die Periode groß wird, theoretisch max. c-1. In diesem Beispiel ist c = (2^31)-1 (berühmte von Euler nachgewiesene Mersennezahl:).
Google mal nach Alan Miller, der hat einen phantastischen Randomgenerator mit Periode 10^171 geschrieben.
viel spass,
tesuji
-
TGGC schrieb:
Lass mal deinen Frust nicht an mir aus. Warum musst du immer Streit suchen? f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
lol