zufall zwischen 0 und 1

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

da_poller

Betreff: zufall zwischen 0 und 1

BeitragFr, Sep 12, 2008 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
mir erscheinen die werte etwas sehr unzufällig

hier mal ein codefetzen:

Code: [AUSKLAPPEN]

SeedRnd MilliSecs()*Rand(0,1000)
x=Rand(0,1)


10 mal in folge erhalte ich 0 dann 2 mal 1 dann wiederr 8-15 mal 0

und für einen würfel ist das reichlich unzufällig..


hat jemand eine idee wie ich die zufallszahlen etwas zufälliger machen könnte?

The_Nici

BeitragFr, Sep 12, 2008 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Na wenn du 2 Zahlen hast ist das doch auch zufällig, oder?
Dazu verstehe ich deine Rechnung beim SeedRND nicht. Millisecs() reicht.

Nova

BeitragFr, Sep 12, 2008 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst bedenken das 01000110111 genauso wahrscheinlich auftreten kann wie 00000000001.
Also ich kriege bei folgendem Code "zufällige" Zahlen:
Code: [AUSKLAPPEN]
SeedRnd MilliSecs()
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
x=Rand(0,1)
Print x
WaitKey
End
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit
 

da_poller

BeitragFr, Sep 12, 2008 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
nun das ganze befindet cih in meinem code oben initialisiere ich das und TEILWEISE kommt es vor das über 15 mal nacheinander der gleiche wert kommt..

8-10 mal wäre ja noch in einem normalen rahmen aber 15 mal ist shcon heftig..

wobei in einem testcode erhalte ich ganz andere werte als im spiel..
vielleicht baue ich ncoh eine kontroll funktion das er alle 8-10 würfe rand neu initialisiert..

hätte das evtl einen vorteil was die zufälligkeit angeht.?

Nova

BeitragFr, Sep 12, 2008 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, eigentlich schon.
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Sep 12, 2008 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
TEILWEISE kommt es vor das über 15 mal nacheinander der gleiche wert kommt

du darfst auch nur einmal am Anfang seedrnd ausführen
und nicht inerhalb einer Schleife jedesmal vor Rand!
[BB2D | BB3D | BB+]

The_Nici

BeitragFr, Sep 12, 2008 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Nova, nur so als Randbemerkung, der Testcode ist zum weinen.
Guck dir For Next an. :/

Nova

BeitragFr, Sep 12, 2008 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Copy&Paste ging schneller als eine For-Next Schleife zu erstellen. Wink
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

The_Nici

BeitragFr, Sep 12, 2008 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Sich mit Keulen zu verkloppen ist auch einfacher als sich zu erschiessen.
Warum haben wir überhaupt Kleider an, wenn wir doch auch nackt rumrennen können?

Wenn du einen Code als Hilfe oder Beispiel postest, solltest du darauf achtenn dass er schön zu lesen ist.
Dazu wäre
Code: [AUSKLAPPEN]

Seedrnd Millisecs()
For i=1 to 20
   Print Rand(0,1)
Next

Deutlich kürzer gewesen.

Naja, Randbemerkung.
Falls es den Mods nicht gefällt so mögen sie die letzten Posts löschen.
MfG

DerHase

BeitragFr, Sep 12, 2008 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mal nen kleines Programm gemacht, welches zählt, wie oft ein Wechsel zwischen 0 und 1 stattfindet und wie oft keiner, bei hält es sich ziemlich genau die Waage, also würde ich sagen. Wobei aber auch sein kann, das eshäufig zu solchen Folgen kommt. Aber beste Trick bei Roullet zu gewinnen ist ja den Minimum Einsatz auf Rot zu setzen aus dem Raum zu gehen und warten bis man gerufen wird, weil man das obere Limit überschritten hat Wink

Code: [AUSKLAPPEN]
Graphics 640,480,0,2
SetBuffer BackBuffer()

old = Rand(0,1)

While Not KeyHit(1)

   x = Rand(0,1)
   
   c = c + 1
   
   If x = old Then w = w + 1
   
   old = x
   
   Text 10,10,"Gesamte Durchläufe:" + c
   Text 10,40,"Kein Wechsel:" + w
   Text 10,70,"Wechsel:" + (c-w)
   Flip:Cls

Wend


Edit: Ah da ist mir noch was eingefallen, man könnte ein Programm schreiben, das die verschiedenen langen Ketten zählt, daraus könnte man auch Sachen schlussfolgern, aber ich geh nun Grillen und Whisky trinken so long...
Play Satyr!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group