2011-04-19 25 views
5

Hey, eşit dağıtılmış rasgele sayıları seçmek için bir yol var mı? I o da bir ürünü üretmek için kesin% 50 olasılıkla sanmıyorum Bununla birlikte, ya 1 ya da 0 değerini döndürür, bu fonksiyonueşit olarak dağıtılmış rasgele sayılar

Math.floor(Math.random()*2) 

kullanılır. Daha iyi düşünceler? Teşekkürler

+0

IMO sorun değil. Math.random() * 2 ', 0 ile 1,99 arasında bir sayı döndürür; döşeme, 0-0.99 ve 1 değerleri 1-1.99 için 0 verecektir, bu yüzden güzel bile. Ama korkarım ki birileri daha iyi bir fikre sahip. –

+1

Neden biri için tam olarak% 50 olduğunu düşünüyorsunuz? Bu 10000 kez çalıştırılınca ve sonuçların ortalaması bana neredeyse% 50 0'ın% 50'si 1 olan 0,5026 verir. (Bu Firefox 4'tür) – asm

cevap

5

kontrol edin:

<script type="text/javascript"> 
var total = 0; 
var ones = 0; 
for (var i = 0; i < 100000; i++, total++) { 
    ones += Math.floor(Math.random()*2); 
} 
alert(ones/total); 
</script> 

Bu kod bana 0,49972 verir - çok yakın % 50.

0

Eşit şanslı 0 veya 1 üretir.

Ama neden kullanmıyordu:

Math.round(Math.random()) 

? 0, 1, 2, ..., N oluşturmak için değiştirmek ister misiniz? Eğer öyleyse uygulamanızı koruyun.

0

Her iki sonuç için de şans% 50'dir. Sence öyle değil mi?

1

Size (aslında bir tane varsa) kullanarak,

:-) ilk etapta sözde rastgele sayılar kullanılarak olmaz farklılık olduğundan endişe ediyorsan, noktaya% 50'ye yeterince yakın

10 milyon yineleme ile bir döngü yürütmek bana on bin (sadece yüzde 0.00931) bir hata olan 5.000.931 ila 4.999.069 bir oran sağlar.

4

Size eşit dağıtımı vermelidir.

var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a); 

Eğer addressbar kopyalamaya karşı yapıştırarak deneyebilirsiniz: Eğer inanmıyorsanız

javascript:var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a); 
+0

Ooh, daha önce görmediğim düzgün bir numaradır (adres çubuğunda javascript kodlaması). Benim için gömülü kaynak ile HTML dosyaları yazma artık yok. Bunun için +1! – paxdiablo

+0

@paxdiablo Ya da Firebug'un konsolunu, birlikte verilen Opera konsolundaki Chrome'un birlikte bulunduğu Firefox'ta kullanabilirsiniz. Diğer tarayıcılar hakkında bilmiyorum, ama muhtemelen eklentileri veya araçları var. –

3

Sadece deneyin: Bir milyon kare kökü içinde iyidir bu durumda cevaplar arıyoruz

<script type="text/javascript"> 

var zero=0; 
var one=0; 

for (var i=0;i<1000000;i++) 
{ 
    var num=Math.floor(Math.random()*2) 
    if (num) zero++; 
    if (!num) one++; 
} 

document.write("Zero: "+zero+"<br />"); 
document.write("One: "+one+"<br />"); 

</script> 

. Yani gerçekten rastgele sayılar alıyorsanız sonuçların 500.000 + - 1000 olmasını istiyorsunuz.

İlgili konular