ส่วนนิดหนึ่ง
บน 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
ใน OS 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)สำหรับคณิตศาสตร์ที่เต็มไปด้วยเลือดและรายละเอียดการจัดรูปแบบและตัวอย่างอื่น ๆ อีกมากมาย