Zufallszahlen nicht zufällig genug

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Tevlar

Betreff: Zufallszahlen nicht zufällig genug

BeitragSa, Feb 11, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich habe folgendes Problem:

Ich brauche für ein Spiel ständig eine Zufallszahl zwischen 1 und 26.

Am Anfang meines Programmes habe ich

seedrnd(millisecs())

eingegeben und frage die Zufallszahlen später im Spiel mit

x = rnd(1,26)

ab.

Trotzdem muss ich feststellen das einige Zahlen sehr häufig und einige andere sehr selten ausgegeben werden.

Gibt es eine bessere Art um Zufallszahlen noch `zufälliger` zu machen?

(Was klingt das dämlich > Zufallszahlen zufälliger ... Laughing )

Hip Teen

BeitragSa, Feb 11, 2006 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist dann wohl Zufall, dass die so oft drankommen....
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

SoNenTyp

BeitragSa, Feb 11, 2006 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst ja mal Testen wie zufällig das ganze ist.

Mach mal so ein paar millionen Zufallszahlen zwischen 1 und 26. Und trage in eine Liste ein wie oft welche Zahl dran kahm. Wenn die "Zufallsgenerator" guht ist müsste jede zahl ungefähr gleich vor gekommen sein.

Edit: Hier mal so ein Code
Code: [AUSKLAPPEN]
SeedRnd(MilliSecs())


Global Maximal=25
Global Anzahl=10000000
Dim Feld(Maximal)


For Nummer=0 To Anzahl
   zahl=Rand(0,Maximal)
   Feld(zahl)=Feld(zahl)+1
Next



For    Nummer=0 To Maximal
   Print Feld(Nummer)
Next

WaitKey
End
Gruss Der Typ.

User posted image
 

Tevlar

BeitragSa, Feb 11, 2006 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, die idee hatte ich auch.... mein code ist nur etwas `unschöner`:

Global graphx = 1024
Global graphy = 768
Graphics graphx, graphy
SetBuffer BackBuffer()


SeedRnd(MilliSecs())

Dim werte(26)
For t=1 To 26
werte(t) = 0
Next

Cls
Print "Warte..."
For t = 1 To 10000000
x = Rnd (1,26)
werte(x) = werte(x) + 1
Next


Cls
For t = 1 To 26
Print werte(t)
Next

For t=1 To 10
Print
Next


Dabei habe ich bemerkt das die erste und letzte Zahl (hier: 1 und 26) immer nur ca. halb so oft kommt wie die anderen.
Auch wenn man die Anzahl von 26 verändert ist immer die erste und letzte Zahl nur halb so oft da... woran kann das liegen ??

Werde gleich mal deinen Code testen
 

Tevlar

BeitragSa, Feb 11, 2006 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
warum funzt das bei deinem code ? bei dir sind alle zahlen gleich oft.... wo liegt der fehler ?
 

Apocalyptic

BeitragSa, Feb 11, 2006 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Nimm ql:rand statt ql:rnd
2. user posted image
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

HW

BeitragSa, Feb 11, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir das mal angesehen und muss sagen, dass dein Code mit ql:rand statt ql:rnd auch ganz gut funktioniert.
Edit: Apocalyptic, wie has du das mit dem Edit hinbekommen? Shocked
Mit ql:edit gehts schonmal nicht.
 

totonak5

BeitragSa, Feb 11, 2006 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image

einfach unter den symbol "edit" rechte maustaste drücken, eigenschaften, link herauskopieren und das als img einfügen
Just for Fun!
Jesus loves U!
 

HW

BeitragSa, Feb 11, 2006 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, dass es so geht ist ja offensichtlich... Rolling Eyes
Ich dachte, da gäbe es eine Forumsfunktion, von der ich nichts wusste.

SoNenTyp

BeitragSa, Feb 11, 2006 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Rnd giebt kommazahlen zurück. Rand giebt Ganzzahlen zurück.

Nun wird gerundet. z.b. wird 1,49 zu 1. 1,5 wird zu 2. Bei der Ersten und letzten zahl giebt es also nur halb so viele möglichkeiten wie bei denen dazwischen. Folglich kommen diese auch nur halb so oft an die Reihe.
Gruss Der Typ.

User posted image
 

Tevlar

BeitragSa, Feb 11, 2006 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
jep, jetzt funktioniert es....

bei rnd wird dann wohl :

1 - 1,4 = 1
1,5 - 2,4 = 2
.........
24,5 - 25,4 = 25
25,5 - 26 = 26

sein. Was auch erklärt warum die erste und letzte nicht so oft (50%) vorkommen !

Danke, wieder was gelernt
 

Tevlar

BeitragSa, Feb 11, 2006 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ups, das war gleichzeitig
 

Schnuff

BeitragSa, Feb 11, 2006 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
hey user posted image muss dir dass jeder sagen?
[EDIT]dient zum ändern von Beiträgen
Programmers dont die. They gosub without return...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group