Der Martin: Zufallstext

Beitrag lesen

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!