2011-10-16 33 views
8

Tài liệu cho scala.util.Random.nextInt (n: Int): Int cho biết "Trả về pseudorandom, giá trị int được phân bố đồng đều giữa 0 (bao gồm) và giá trị được chỉ định (độc quyền) ..." trong khi đối với scala.util.Random.nextInt(): Int nó nói "Trả về pseudorandom tiếp theo, phân phối thống nhất int value ..." , mà không ssaying bất cứ điều gì về số không. Tôi có thể thỉnh thoảng nhận được giá trị âm ở đây không?Có thể scala.util.Random.nextInt(): Int thỉnh thoảng trả về một giá trị âm?

+0

Nó nói ở đâu? Các tài liệu tôi tìm thấy cho biết "Tất cả 2^32 giá trị int có thể được tạo ra với xác suất bằng (xấp xỉ)", có nghĩa là số âm là * nhiều khả năng hơn số dương (vì có thêm một số âm). – Malvolio

Trả lời

9

Dường như, có. Nó trả về giá trị âm trong lần thử đầu tiên của tôi! :-)

scala> import util.Random 
import util.Random 

scala> Random.nextInt 
res0: Int = -299006430 
+0

tỷ lệ cược đó là bao nhiêu? :) –

+0

@FabienWarniez, tỷ lệ cược của bạn nhận xét điều này trên bài đăng cổ xưa của tôi hôm qua là gì, và tôi chạy vào tình huống tương tự vào khoảng thời gian đó? :) https://twitter.com/missingfaktor/status/914642815854006272 – missingfaktor

+0

Tôi là một chút TBH bị ma quái! – missingfaktor

12

Có, bạn có thể (và đó là ok do definition phân phối đồng đều). Hơn nữa, bạn sẽ nhận được nó trong gần 50% các trường hợp.

(for(i <- 1 to 100000) yield scala.util.Random.nextInt()).filter(_<0).length 

đã mang lại cho tôi 49946 - tương đối gần 50%.

+0

Tính trung bình, trên thực tế, * chính xác * 50% số trường hợp –

+1

@Luigi Đừng quên về các trường hợp trung lập, khi giá trị ngẫu nhiên bằng 0. Vì vậy, sẽ có 49,9 ...% phần trăm tích cực, cùng số lượng âm và một vài số không. –

+0

Tôi không quên ... tốt, tôi giả sử bất kỳ giá trị nào cũng có khả năng như nhau. Có lẽ bạn không thể nhận được Int.MinValue hoặc một cái gì đó. Có 2147483648 tiêu cực, 2147483647 dương, và 1 số không Int –

2

scala.uti.Random.nextInt(): Int tận dụng cùng một phương thức java.util.Random. Và phạm vi như Luigi đã chỉ ra là [Integer.MIN_VAL, Integer.MAX_VAL]. Trên thực tế "giá trị int phân bố thống nhất" có nghĩa là bất kỳ số lượng loại int nào cũng có thể được trả về và cơ hội của mỗi loại trong lý thuyết là giống nhau.

7

Như bạn thấy here (sử dụng Mike Harrah của tuyệt vời sxr), Scala của Random chỉ đại biểu cho một nền tảng java.util.Random, được gọi là self.

Khi những người khác chỉ ra phạm vi mặc định là từ Integer.MIN_VALInteger.MAX_VAL, nói cách khác, bất kỳ Integer nào có thể, bao gồm cả số âm.

Nếu bạn muốn chỉ trong phạm vi tích cực, bạn có thể sử dụng phương pháp quá tải nextInt rằng có một đối số, như thế này:

Random.nextInt(Integer.MAX_VALUE); 

Theo các tài liệu:

Trả về một giả ngẫu nhiên, thống nhất giá trị int phân tán giữa 0 (bao gồm) và giá trị được chỉ định (độc quyền), được rút ra từ chuỗi này trình tạo số ngẫu nhiên.

Các vấn đề liên quan