Ich weiß schon, was [0,x) bedeutet, aber mir ging es um etwas ganz anderes.
Wenn ich beispielsweise eine Funktion namens rand() habe, die gleichverteilte unabhängige und echte
Zufallszahlen allerhöchster Güte im Bereich von 0-2 ausspucken würde, und ich wollte aber nur 0 oder 1
haben, und das versuche mit rand()%2 zu bekommen, kommt die 0 doppelt so häufig raus wie die 1.
0 % 2 = 0
1 % 2 = 1
2 % 2 = 0
RAND_MAX ist in der Regel natürlich größer, aber der Effekt ist immer der selbe. Deshalb ist es eine
schlechte Idee, die Zufallszahlen auf diese Weise auf eine kleinere Menge zu reduzieren.
€dit:
Eine Funktion, die diesen Effekt vermeidet, habe ich mal für ein Projekt von mir geschrieben:
http://devotchka.vellocet.net/boskop/browser/trunk/src/rrand.c?rev=171
die Seedfunktion srrand() nimmt einen seedwert für srand() und einen FILE-Zeiger, aus dem
Zufallszahlen gelesen werden können (z.B. /dev/random). Letzterer wird bevorzugt. Nur wenn
der Zeiger NULL ist, wird auf rand() als Zufallsquelle zurückgefallen.
rrand() nimmt als Parameter die Obere Schranke - 1 des Intervalls, aus dem die Zufallszahlen
kommen sollen. Untere Schranke ist 0.
Wenn die Zufallszahlenquelle gleichverteilt ist, ist das Ergebnis von rrand() garantiert auch
gleichverteilt. Im Gegensatz zu dem Modulo-Gemurkse.