Calocybe: cross browser random pictures

Beitrag lesen

var num = Math.floor(picCount * Math.random() - 1);

Vorsicht! Da machst eher DU den Fehler!
Math.random() liefert eine Zahl zwischen 0 und 1 (<1) zurück.
picCount * Math.random() - 1 kann also gut mal -1 ergeben,

Stimmt. Da hab ich wohl solange drueber nachgedacht, dass ich am Ende auch nicht mehr wusste, was ich eigentlich wollte. *g* Der langen Ueberlegung hat es uebrigens bedurft (bedurft? Ist das wirklich das Praeteritum von beduerfen?), weil mir naemlich gar nicht so klar war, dass Math.random() nicht vielleicht doch mal eine glatte 1 zurueckliefert. Das wird naemlich keineswegs so in der JS-Doku gesagt. Dort steht nur "zwischen 0 und 1", aber inklusive oder exklusive 0 und 1? Das steht dort nicht. Am Ende habe ich mich aber auch dafuer entschieden, dass die 1 wohl nie vorkommen wird, weil das schlisslich in jeder anderen Programmiersprache auch so ist, und da ja JS auch nur in C++ geschrieben ist... Dann hab ich wohl dummerweise die -1 wieder mit reingeruehrt.

während (picCount - 1) * Math.random() nur negative Werte ergibt, falls es keine Bilder gibt (picCount = 0).

Na gut, ich denke, den Fall koennen wir ausklammern.

Der Fehler in der ursprünglichen Formel liegt eher beim Math.round, daß wohl bei eingen Browsern nur abrundet, bei anderen manchmal auch aufrundet (4.5 ergibt dann 5).

Wirklich? Welche sind denn das? Meines Wissens rundet Math.round() und Math.floor rundet *ab*.

Der Faktor picCount=5 wird dann mit einer Zahl zwischen 0 und 1 (<1) multipliziert. Das ergibt etwas zwischen 0 und 4.99999... , also abgerundet nur die Zahlen 0 bis 4. Die Zahl 5 ergibt sich nie, da Math.random() immer kleiner 1 ist!

Hoffentlich, aber woher *weisst* Du das? Ginge es um was wichtiges, wuerde ich mich nicht drauf verlassen.