krztyna
W BSD i OSX możesz użyć jot, aby zwrócić pojedynczą -r
liczbę losową ( ) z przedziału min
do max
włącznie.
$ min=5
$ max=10
$ jot -r 1 $min $max
Problem z dystrybucją
Niestety na zasięg i rozkład liczb generowanych losowo ma wpływ fakt, że jot używa arytmetyki zmiennoprzecinkowej podwójnej precyzji wewnętrznie i printf (3) do formatu wyjściowego, co powoduje problemy z zaokrąglaniem i obcinaniem. Dlatego interwały min
i max
są generowane rzadziej, jak pokazano:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
W OS X 10.11 (El Capitan) wydaje się, że zostało to naprawione:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
i...
$ 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
Rozwiązanie problemu dystrybucji
Na starsze wersje OS X na szczęście istnieje kilka obejść. Jednym z nich jest użycie konwersji liczb całkowitych printf (3). Jedynym zastrzeżeniem jest to, że teraz staje się maksimum interwału max+1
. Korzystając z formatowania liczb całkowitych, uzyskujemy sprawiedliwy rozkład w całym przedziale czasowym:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
Idealne rozwiązanie
Wreszcie, aby uzyskać rzetelny rzut kostkami za pomocą obejścia, mamy:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Dodatkowa praca domowa
Zobacz jot (1), aby poznać szczegóły matematyki i formatowania oraz wiele innych przykładów.