jot
Unter BSD und OSX können Sie jot verwenden , um eine einzelne Zufallszahl ( -r
) aus dem Intervall min
bis max
einschließlich zurückzugeben.
$ min=5
$ max=10
$ jot -r 1 $min $max
Verteilungsproblem
Unglücklicherweise wird der Bereich und die Verteilung zufällig generierter Zahlen durch die Tatsache beeinflusst, dass jot intern Gleitkomma-Arithmetik mit doppelter Genauigkeit und printf (3) für das Ausgabeformat verwendet, was zu Rundungs- und Kürzungsproblemen führt. Daher werden die Intervalle min
und max
weniger häufig generiert, wie gezeigt:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
Unter OS X 10.11 (El Capitan) scheint dies behoben worden zu sein:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
und...
$ jot -r 1000000 1 10 | sort -n | uniq -c
100430 1
99965 2
99982 3
99796 4
100444 5
99853 6
99835 7
100397 8
99588 9
99710 10
Lösen des Verteilungsproblems
Für ältere Versionen von OS X gibt es glücklicherweise mehrere Problemumgehungen. Eine besteht darin, die Ganzzahlkonvertierung printf (3) zu verwenden. Die einzige Einschränkung ist, dass das Intervallmaximum jetzt wird max+1
. Durch die Verwendung der Ganzzahlformatierung erhalten wir eine gerechte Verteilung über das gesamte Intervall:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
Die perfekte Lösung
Um einen fairen Würfelwurf mit dem Workaround zu erzielen, haben wir:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Zusätzliche Hausaufgaben
In jot (1) finden Sie ausführliche Informationen zu Mathematik und Formatierung sowie viele weitere Beispiele.