ghi
Trên BSD và OSX, bạn có thể sử dụng jot để trả về một số ngẫu nhiên ( -r
) duy nhất từ khoảng min
đến max
, bao gồm.
$ min=5
$ max=10
$ jot -r 1 $min $max
Vấn đề phân phối
Thật không may, phạm vi và phân phối của các số được tạo ngẫu nhiên bị ảnh hưởng bởi thực tế là jot sử dụng số học dấu phẩy động chính xác kép và printf (3) cho định dạng đầu ra, gây ra các vấn đề làm tròn và cắt. Do đó, khoảng min
và max
được tạo ra ít thường xuyên hơn như đã trình bày:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
Trên OS X 10.11 (El Capitan), điều này dường như đã được sửa:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
và ...
$ 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
Giải bài toán phân phối
Đối với các phiên bản OS X cũ hơn, may mắn thay, có một số cách giải quyết. Một là sử dụng chuyển đổi số nguyên printf (3). Nhắc nhở duy nhất là khoảng thời gian tối đa bây giờ trở thành max+1
. Bằng cách sử dụng định dạng số nguyên, chúng tôi có được phân phối công bằng trên toàn bộ khoảng thời gian:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
Giải pháp hoàn hảo
Cuối cùng, để có được một con súc sắc công bằng sử dụng cách giải quyết, chúng ta có:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Bài tập về nhà thêm
Xem jot (1) để biết chi tiết toán học và định dạng và nhiều ví dụ khác.