джот
На BSD та OSX ви можете використовувати jot, щоб повернути одне випадкове ( -r
) число з інтервалу min
до max
включно.
$ min=5
$ max=10
$ jot -r 1 $min $max
Проблема розподілу
На жаль, на діапазон та розподіл випадково згенерованих чисел впливає той факт, що jot використовує внутрішню арифметику з плаваючою точкою подвійної точності внутрішньо та printf (3) для вихідного формату, що викликає проблеми округлення та усікання. Тому інтервал min
і max
генерується рідше, як показано:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
У ОС X 10.11 (El Capitan) це, здається, було виправлено:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
і ...
$ 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
Розв’язання задачі на розподіл
Для старих версій OS X, на щастя, існує кілька обхідних шляхів. Одне полягає у використанні цілочислового перетворення printf (3). Єдине застереження - це те, що зараз стає максимальний інтервал max+1
. Використовуючи цілісне форматування, ми отримуємо справедливий розподіл на весь інтервал:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
Ідеальне рішення
Нарешті, щоб отримати справжній рулон кісток за допомогою вирішення, ми маємо:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Додаткові домашні завдання
Див. Jot (1) щодо математики та деталізації форматування та багато інших прикладів.