25. September 2007 14:35
25. September 2007 15:11
25. September 2007 15:17
Onlinehilfe hat geschrieben:Seed = A number RANDOMIZE uses to create a unique set of numbers. If you use the same number as seed, you get the same set of numbers generated.
25. September 2007 15:20
evaluate(i,copystr(format(time),7));
randomize(i);
message(format(random(6)));
25. September 2007 15:34
24. Juli 2012 16:46
rkaufmann hat geschrieben:Ich finde es trotzdem seltsam, da auch nach einmaligem Ausführen von RANDOMIZE der erste RANDOM(6) grundsätzlich immer 1,3 oder 5 liefert.
Nein ich wollte kein Würfelspiel programmieren, wäre aber mal einen Versuch wert.
Ich wollte eigentlich eine Multiple Choice Prüfung für unsere Azubis erstellen mit Zufallsgenierierten Fragen aus einem Fragenkatalog.
24. Juli 2012 17:59
25. Juli 2012 08:14
25. Juli 2012 08:58
for i := 1 to 100000 do begin
RANDOMIZE();
x := RANDOM(6);
.....
end;
25. Juli 2012 09:45
rkaufmann hat geschrieben:Nein, das macht er nur, wenn man eine gerade Zahl als Parameter für RANDOM angibt.
Der Seed im RANDOMIZE spielt dabei überhaupt keine Rolle.
Ich hab da diverse Tests mit 100.000 Zufallszahlen gemacht und dabei immer mit RANDOMIZE() gearbeitet, also dem Default Seed.
Wenn der Parameter am RANDOM eine gerade Zahl ist, ist die erste Zufallszahl immer eine ungerade Zahl.
Wenn du also eine Schleife baust wie die hier bekommst du als Zufallszahl immer nur ungerade Zahlen:
25. Juli 2012 09:53
25. Juli 2012 10:26
meto89 hat geschrieben:Weil es hier gerade noch mal aufgegriffen wurde. Ich habe damals bei meinen Tests festgestellt, dass das erste RANDOM nach einem RANDOMIZE bei mir immer ungerade Zahlen ermittelt und z. B. der 101te nur gerade Zahlen liefert... Als ich mir das dann noch ein wenig angeschaut habe ist mir aufgefallen, dass beim dritten Aufruf der RANDOM-Funktion tatsächlich ein zufälliger Wert herauszukommen scheint. Also habe ich seither immer drei RANDOM-Aufrufe nach einem RANDOMIZE eingebaut.
25. Juli 2012 17:06
//generiert auf Basis von GUID-Werten einen Seed zwischen 1 und 2.147.483.646.
//bigseed ist vom Typ BigInteger
EVALUATE(bigseed, COPYSTR(DELCHR(CREATEGUID(),'=','{}-ABCDEF'),1,10));
Seed:= (bigseed MOD 2147483646) +1;
//......................................................................................................
//Code: Minimal Standard Pseudozufallszahlengenerator (linearer Kongruenzgenerator)
//Quelle: Steve K. Park and Keith W. Miller "Random Number Generators: Good ones are hard to find", 1988
//Sprache: Navision C/AL (modifiziert von winfy)
//Limit: nur für 32 Bit signed Integer geeignet, erzeugt Pseudozufallszahlen von 1 bis Parameter "Number"
//......................................................................................................
//Definitionen
//a,m,q,r sind Variablen/Konstanten vom Typ Integer
//test, hi, lo sind Variablen vom Typ Integer
//Seed als Übergabeparameter vom Typ Integer
//Initialisierung der Werte
a := 16807; //alternativ a:= 48271;
m := 2147483647;
q := 127773; //alternativ q:= 44488;
r := 2836; //alternativ r:= 3399
//alternative "gute" Werte (L'Ecuyer)
//a := 39373;
//m := 2147483647;
//q := 54542;
//r := 1481;
//Pseudozufallszahl berechnen
hi := Seed DIV q;
lo := Seed MOD q;
test := a * lo - r * hi;
//positiven Wertebereich sicherstellen
IF test > 0 THEN Seed := test
ELSE Seed := test + m;
//Ergebnis im Bereich 1 bis Number erzeugen
IF (Number > 0) THEN EXIT((Seed MOD Number) + 1)
ELSE EXIT(1); //alternativ EXIT(0) oder Fehlermeldung