Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-12-2005, 12:57   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 72
Zufallsgenerator nicht zufällig...!?

Hallo,

habe ein kleines Problem mit folgendem Skript:

Code:
rndTemp = Math.round(2 * Math.random() + 1);
if (rndTemp == 1) {
	_root.naechsteFarbe = "rot";
}
if (rndTemp == 2) {
	_root.naechsteFarbe = "gruen";
}
if (rndTemp == 3) {
	_root.naechsteFarbe = "blau";
}
Die Variable "_root.naechsteFarbe" soll natürlich zu gleichen Verhältnissen eine Zufallsfarbe zugewiesen bekommen. Momentan sieht es allerdings eher so aus, als wäre grün am häufigsten, gefolgt von blau und dann rot.

Wahrscheinlich habe ich ein mathematisches/ programmiertechnisches Problem, aber leider bin ich nicht so der Mathematiker...

Kann mir jemand von Euch helfen?
Vielen Dank!
hyperframe ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:03   #2 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Nein... deine Programmierung stimmt schon. Auch die Wahrscheinlichkeit! Leider lässt sich diese nicht immer genau auf 10 Versuche runterbrechen! Würdest du 10000 oder mehr Versuche machen, würdest du sehen, dass alle Farben ungefähr gleich oft auftreten!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:34   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 72
Ne, die Programmierung stimmt leider nicht. Ich hab mal 10000 Durchläufe gemacht, und dabei kam heraus, dass grün etwa doppelt so häufig vorkommt wie die anderen:


Rot: 2497 Grün: 4958 Blau: 2544


Hier das Skript zum Testen:

Code:
for (i=1; i<10000; i++) {
	rndTemp = Math.round(2*Math.random()+1);
	if (rndTemp == 1) {
		rot++;
	}
	if (rndTemp == 2) {
		gruen++;
	}
	if (rndTemp == 3) {
		blau++;
	}
}
trace("Rot: "+rot+" Grün: "+gruen+" Blau: "+blau);
hyperframe ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:39   #4 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
hmm ... er hat nen punkt ... Grün kommt tatsächlich immer doppelt so oft vor wie die anderen.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:43   #5 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
PHP-Code:
rndTemp random(3)+1
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:45   #6 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Aber wie kann das sein? random() ist doch angeblich veraltet? ICh schätze mal das das an der verbindung von Math.random() und Math.round liegt, aber wo ist denn der Sinn von Math.random wenn random() unkomplizierter zu schreiben ist und auch noch "zufälligere" Ergebnisse liefert?
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:45   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
interessant wird es wenn man noch mehr dazu nimmt:

for (i=1; i<10000; i++) {
rndTemp = Math.round(5*Math.random());
if (rndTemp == 0) {
rot++;
}
if (rndTemp == 1) {
gruen++;
}
if (rndTemp == 2) {
blau++;
}
if (rndTemp == 3) {
rot2++;
}
if (rndTemp == 4) {
gruen2++;
}
if (rndTemp == 5) {
blau2++;
}
}
trace("Rot: "+rot+" Grün: "+gruen+" Blau: "+blau+" Rot2: "+rot2+" Grün2: "+gruen2+" Blau2: "+blau2);


immer die erste und die letzte var haben nur halbsoviel treffer
mannimedia ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:47   #8 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
@readme.txt: ...und auch noch schneller ist! Nicht alles glauben, was in der Flashhilfe steht!
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:47   #9 (permalink)
ketten_karusell_
 
Benutzerbild von ge_flash
 
Registriert seit: Jan 2002
Ort: Duitsland geen Westen
Beiträge: 1.246
Der Fragger hat es doch schon geschrieben.

oder:

rndTemp = Math.floor(Math.random()*3)+1;
__________________
-----------------------------------------------
wichtige Befehle:
-format internet
-fdisk internet
ge_flash ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:48   #10 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Zitat:
Zitat von Der Frager
@readme.txt: ...und auch noch schneller ist! Nicht alles glauben, was in der Flashhilfe steht!
lol ... und ich hab mir gerade angewöhnt Math.random zu verwenden weil ich ein guter Programmierer sein wollte ^^ ... doof das
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:49   #11 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
oder ceil

rndTemp = Math.ceil(Math.random()*3);
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 09-12-2005, 13:50   #12 (permalink)
ketten_karusell_
 
Benutzerbild von ge_flash
 
Registriert seit: Jan 2002
Ort: Duitsland geen Westen
Beiträge: 1.246
__________________
-----------------------------------------------
wichtige Befehle:
-format internet
-fdisk internet
ge_flash ist offline   Mit Zitat antworten
Alt 09-12-2005, 14:17   #13 (permalink)
robo kalkühl
Gast
 
Beiträge: n/a
Zitat:
Zitat von mannimedia
interessant wird es wenn man noch mehr dazu nimmt:

for (i=1; i<10000; i++) {
rndTemp = Math.round(5*Math.random());
if (rndTemp == 0) {
rot++;
}
if (rndTemp == 1) {
gruen++;
}
if (rndTemp == 2) {
blau++;
}
if (rndTemp == 3) {
rot2++;
}
if (rndTemp == 4) {
gruen2++;
}
if (rndTemp == 5) {
blau2++;
}
}
trace("Rot: "+rot+" Grün: "+gruen+" Blau: "+blau+" Rot2: "+rot2+" Grün2: "+gruen2+" Blau2: "+blau2);


immer die erste und die letzte var haben nur halbsoviel treffer
hehehe, genau so muß es ja auch sein.
überlege dir mal, was du da berechnest.

Math.random() ergibt (laut MM) eine zahl x mit 0<=x<1, also irgentwas in der art 0,xxxxx
mit Math.round() wird die zahl nach den gängigen rundungregeln auf die nächthöere/niedrigere ganze zahl gerundet. soweit so gut.

was machst du jetzt in deiner rechnung?
prinzipiell ist es erstmal eine abbildung aus dem intervall [0,1) auf die menge {0,1,2,3,4,5}, aber welche zahlen aus dem intervall werden jetzt auf welches element der menge abgebildet?
ein bischen rumspielen mit dem taschenrechner reicht hier volkommen, einfach ein bischen rumrechnen:
für x aus [0;0,1) * 5 ist das ergibnis immer unter 0,5, also wird auf 0 gerundet,
für x aus [0,1;0,2) *5 ist das ergebnis immer zwischen 0,5 und 1, also wird auf 1 gerundet,
für x aus [0,2;0,3) *5 ist das ergebnis immer zwischen 1 und 1,5, also wird auf 1 gerundet,

hier sieht man schon: auf 1 werden doppelt so viele ergebnisse abgebildet wie auf die 0, wenn man davon ausgeht, das x gleichverteilt ist!

wenn du das mit den anderen intervallen so weiter rechnest, wirst du festellen , das genau dein ergebniss bestätigt wird!


ps: zu notation: [x,y) ist ein intervall, das von x bis nach y geht, aber y _nicht_ enthält, also gilt für jedes a aus dem intervall x<=a<y


ich hoffe das ist ein bischen verstädlich geworden, und nicht totaler müll, den ich mir da zusammen gereimt habe
  Mit Zitat antworten
Alt 09-12-2005, 14:30   #14 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 72
SUUUPER, vielen dank an alle, die geholfen haben!

ja, robo, soweit ich das mit meinem laienhaften mathematischen verständnis nachvollziehen kann, hört sich das sehr logisch an

dann werde ich wohl ceil oder floor benutzen, weil da das problem scheinbar nicht auftritt.

dann kann ich mich ja wieder um die eigentlichen dinge kümmern

bis denne
hyperframe ist offline   Mit Zitat antworten
Alt 09-12-2005, 14:37   #15 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 173
@robo

THX für die Erklärung.

Jetzt ist es mir auch klar. Hab mir auch schon gedacht dass es vom Runden kommt. Bei .floor wird ja immer abgerundet, von daher klar

Greetz
mannimedia ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele