TL; DR
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Để có được số ngẫu nhiên
generateRandomInteger(-20, 20);
KHAI THÁC DƯỚI ĐÂY
Chúng ta cần lấy một số nguyên ngẫu nhiên, giả sử X giữa min và max.
Đúng?
tức là
tối thiểu <= X <= max
Nếu chúng ta trừ đi tối thiểu khỏi phương trình, điều này tương đương với
0 <= (X - phút) <= (tối đa - phút)
Bây giờ, cho phép nhân này với một số ngẫu nhiên r
là
0 <= (X - phút) * r <= (tối đa - phút) * r
Bây giờ, hãy thêm trở lại min vào phương trình
phút <= min + (X - phút) * r <= min + (tối đa - phút) * r
Bây giờ, hãy chọn một hàm dẫn đến r sao cho nó thỏa mãn phạm vi phương trình của chúng tôi là [min, max]. Điều này chỉ có thể nếu 0 <= r <= 1
ĐỒNG Ý. Bây giờ, phạm vi của r tức là [0,1] rất giống với kết quả của hàm Math.random (). Phải không?
Hàm Math.random () trả về số dấu phẩy động, giả ngẫu nhiên trong phạm vi [0, 1); nghĩa là, từ 0 (bao gồm) cho đến nhưng không bao gồm 1 (độc quyền)
Ví dụ,
Trường hợp r = 0
min
+ 0 * ( max
- min
) = phút
Trường hợp r = 1
min
+ 1 * ( max
- min
) = tối đa
Trường hợp ngẫu nhiên sử dụng Math.random 0 <= r <1
min
+ r * ( max
- min
) = X , trong đó X có phạm vi tối thiểu <= X < max
Kết quả X ở trên là một số ngẫu nhiên. Tuy nhiên do Math.random () giới hạn bên trái của chúng tôi được bao gồm và giới hạn bên phải là độc quyền. Để bao gồm quyền ràng buộc của chúng tôi, chúng tôi tăng quyền bị ràng buộc bởi 1 và kết quả sàn.
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Để có được số ngẫu nhiên
generateRandomInteger(-20, 20)
;