Hallo,
a = Math.random();
wozu legst du hier eine Zufallszahl an, die du im nachfolgenden Code nie mehr verwendest?
iRandom = Math.round((Math.random() * max + 0.5));
Auch wenn Sven hier wohl andeuten will, du würdest keine gleichverteilten Zufallszahlen bekommen: Doch, mit diesem Ansatz schon. Es ist nur sehr untypisch, und oft sieht man den fehlerhaften Ansatz:
rnd = Math.round(Math.random()*max);
Hier wäre der Wertebereich [0..max], die Eckwerte eingeschlossen; allerdings würden die Werte 0 und max statistisch gesehen nur halb so oft vorkommen wie die Zwischenwerte. Durch deine Addition von 0.5 verschiebst du den Wertebereich auf [1..max] mit gleicher Wahrscheinlichkeit für alle Werte.
Der einfachere, häufiger empfohlene Weg ist aber
rnd = Math.floor(Math.random()*max);
und der ergibt einen Wertebereich von [0..max-1].
Kann man sagen, dass eine Version davon sicherer/eleganter ist?
Nein, eigentlich nicht. Nur ungewöhnlich sind sie beide - unter anderem dadurch, dass du die Indizierung des Arrays mit 1 beginnst anstatt mit 0, und dadurch das Handling etwas umständlicher wird.
P.S. Bei dem ersten Rechensystem ist ja die Zahl _0_ durch dieses " + 0.5" und math.round mathematisch gesehen nicht inbegriffen?!
Warum diese Verblüffung? Ich dachte, das sei Absicht!
So long,
Martin
Die letzten Worte der Challenger-Crew:
Lasst doch mal die Frau ans Steuer!