| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #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";
} Wahrscheinlich habe ich ein mathematisches/ programmiertechnisches Problem, aber leider bin ich nicht so der Mathematiker... Kann mir jemand von Euch helfen? Vielen Dank! |
| | |
| | #2 (permalink) |
| °.oO°O.o°.oO.o°O 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 |
| | |
| | #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); |
| | |
| | #4 (permalink) |
| no guts no glory 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.' |
| | |
| | #6 (permalink) |
| no guts no glory 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.' |
| | |
| | #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 |
| | |
| | #9 (permalink) |
| ketten_karusell_ 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 |
| | |
| | #10 (permalink) | |
| no guts no glory Registriert seit: May 2004 Ort: Nordhorn
Beiträge: 7.998
| Zitat:
__________________ 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.' | |
| | |
| | #13 (permalink) | |
| Gast
Beiträge: n/a
| Zitat:
ü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 | |
|
| | #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 |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |