Belirli bir aralıktaki Javascript üreten rasgele sayı?
Nasıl, *örneğin 10* y = 8
4, 5, 6, 7, 8 herhangi bir çıktı ki Javascript belirtilen iki değişken arasında rastgele bir tam sayı oluşturabilirim?
CEVAP
Mozilla Developer Center sayfasında bazı örnekler var:
/**
* Returns a random number between min (inclusive) and max (exclusive)
*/
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) min;
}
/**
* Returns a random integer between min (inclusive) and max (inclusive)
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min 1)) min;
}
İşte bunun arkasındaki mantık. Üç basit kural var:
Math.random()
0 (dahil) ile 1 arasında Number
(özel) verir. Böyle bir aralık var:
[0 .................................... 1)
Şimdi, min
(dahil) ve max
arasında bir numara (özel) istiyoruz:
[0 .................................... 1)
[min .................................. max)
Math.random
[max min) muhabiri aralığı elde etmek için kullanabiliriz. Ama, ikinci Aralık min
çıkararak biraz sorun faktör gerekir: birincisi
[0 .................................... 1)
[min - min ............................ max - min)
Bu verir:
[0 .................................... 1)
[0 .................................... max - min)
Şimdi Math.random
uygulamak ve muhabiri hesaplamak olabilir. Hadi rastgele bir sayı seçin:
Math.random()
|
[0 .................................... 1)
[0 .................................... max - min)
|
x (what we need)
x
, bulmak için çok yapardık,:
x = Math.random() * (max - min);
Bir dizi [max min) aralığı almamız min
tekrar eklemeyi unutma:
x = Math.random() * (max - min) min;
Bu MDC gelen ilk özellik oldu. İkincisi, min
max
, her ikisi de dahil) arasında bir tamsayı döndürür.
Elde tamsayı için round
, ceil
floor
kullanabilirsiniz.
Math.round(Math.random() * (max - min)) min
, bu ancak olmayan eşit dağılım sağlar kullanabilirsiniz. Her ikisi de, min
max
sadece yaklaşık yarım rulo şansı var:
min...min 0.5...min 1...min 1.5 ... max-0.5....max
└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘ ← round()
min min 1 max
max
aralığı dışında kalmasıyla, daha az min
daha rulo için bir şans var.
Math.floor(Math.random() * (max - min 1)) min
ile mükemmel şekilde eşit bir dağılım var.
min.... min 1... min 2 ... max-1... max.... max 1 (is excluded from interval)
| | | | | |
└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘ ← floor()
min min 1 max-1 max
Sen bir insan değilsin ceil()
-1
bu denklem, çünkü max
şimdi biraz daha az şansa rulo, ama roll (istenmeyen) min-1
sonuç çok.
Rasgele sayı Seedable JavaScript jener...
JavaScript içinde bir dizi belirli bir...
Objective-C Rasgele Sayı üretme...
Nasıl C rasgele tamsayı sayı üretmek m...
Nasıl Javascript bir tam Sayı kayan no...