Antje Hofmann: Array Fehler oder Endlosschleife

Beitrag lesen

Hallo Sönke

Nachdem ich im ECMAScript-Standard nachgeschaut habe, stimmt das zwar auch, muß aber bemängeln, daß es in SelfHTML etwas anders aussieht :)

in SELFHTML steht was in der Netscape-Doku steht. Also eine Zufallszahl zwischen 0 und 1.

Aber ob's nun floor() & length oder round() & length-1 lautet, ist doch IMHO wurscht.

nein, ist es nicht

da die Länge eines Arrays durchaus 0 sein kann, kann eine negative Zahl entstehen.

Round hat aber einen weiteren Nachteil. Die Zufallszahlen sind nicht mehr gleichverteilt.

Hier mal ein kleines Script, welches dieses Verhalten demonstriert:

runden=new Array(0,0,0,0,0,0);
 abrunden=new Array(0,0,0,0,0,0);

for (i=0;i<20000;i++)
 {
  zufallszahl=Math.random();
  runden[Math.round(zufallszahl*5)]++;
  abrunden[Math.floor(zufallszahl*6)]++;
 }
 document.write("Runden: ",runden,"<br><br>Abrunden: ",abrunden)

Obwohl jeweils die gleiche Zufallszahl verwendet wurde, sieht das Ergebnis so aus:

Runden: 1981,3978,4027,3967,3963,2084

Abrunden: 3307,3340,3339,3293,3283,3438

Grund sind die Rundungsregeln, was in diesem Fall bedeutet:

auf 0 wird gerundet, wenn der Wert zwischen 0 und 0,5 liegt
auf 1, wenn der Wert zwischen 0,5 und 1,5 liegt ...
auf 6, wenn der Wert zwischen 5,5 und 6 liegt.

Viele Grüße

Antje