mínimo
No BSD e no OSX, você pode usar jot para retornar um único -r
número aleatório ( ) do intervalo min
para max
, inclusive.
$ min=5
$ max=10
$ jot -r 1 $min $max
Problema de distribuição
Infelizmente, o alcance e a distribuição dos números gerados aleatoriamente são influenciados pelo fato de o jot usar aritmética de ponto flutuante de precisão dupla internamente e printf (3) para o formato de saída, o que causa problemas de arredondamento e truncamento. Portanto, os intervalos min
e max
são gerados com menos frequência, conforme demonstrado:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
No OS X 10.11 (El Capitan), isso parece ter sido corrigido:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
e...
$ 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
Resolvendo o problema de distribuição
Para versões mais antigas do OS X, felizmente existem várias soluções alternativas. Uma é usar a conversão inteira printf (3). A única ressalva é que o intervalo máximo agora se torna max+1
. Usando a formatação inteira, obtemos uma distribuição justa em todo o intervalo:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
A solução perfeita
Por fim, para obter um lançamento justo dos dados usando a solução alternativa, temos:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Lição de casa extra
Veja jot (1) para detalhes matemáticos e de formatação e muitos outros exemplos.