5.00 / 1 oy

Java ile Yazı Tura Gelme Olasılığını Hesaplamak

Simülasyon konularuna girmişken Java'nın istatistiksel çalışmalar için kullanılabileceğinin giriş düzeyinde birkaç örneğini paylaşmak istiyorum. Örneğin bir parayı havaya attığınızda yazı ya da tura gelmesi olasılığı kaçtır desem hemen herkes 1/2 cevabını verecektir. Halbuki bu cevap istatistiğe göre yanlıştır çünkü büyük sayılar kanununa göre iki sonuçlı bir olayın ortaya çıkma olasılığı 1/2'dir, ancak ve ancak yeterli sayıda deneme yapılması şartı altında. Yani bir parayı havaya attığımda tura gelme olasılığı aslında ya 0'dır ya da 1'dir. Denemesi bedava:

Örnek: Bir paranın yazı ya da tura gelme olasılığını hesaplayan algoritma. (Paranın nasıl rastgele yazı ya da tura geldiğini incelemek için bkz: Java'da Rastgele Yazı Tura Atan Program)

int yazi=0;
int tura=0;

double sayi=Math.random();

if(sayi<0.5)
    tura++;
else
    yazi++;

int toplam=yazi+tura;

System.out.println("Yazı gelme olasılığı:"+((double)yazi/toplam));
System.out.println("Tura gelme olasılığı:"+((double)tura/toplam));

Çıktı:

Yazı gelme olasılığı:1.0
Tura gelme olasılığı:0.0

Bu örneği bir kez daha çalıştırdığınızda bu sefer tura gelme olasılığı da 1 gelebilir. Sonuç olarak bir parayı bir kere yazı tura atarak yazı tura gelme olasılığını hesaplayabilmek mümkün değildir. Peki 10 kere atsak ne olur? Tümü yazı ya da tura da gelebilir ama yazı ve tura gelme sayıları muhtemelen birbirine biraz daha yakın olacaktır.

Örnek: 10 kere yazı tura atarak olasılık hesabı yapan program

int yazi=0;
int tura=0;

for (int i=1; i<=10; i++)
{
double sayi=Math.random();
  
    if(sayi<0.5)
        tura++;
    else
        yazi++;
}

int toplam=yazi+tura;

System.out.println("Toplam Deneme:"+toplam);
System.out.println("Yazı sayısı:"+yazi);
System.out.println("Tura sayısı:"+tura);
System.out.println("Yazı gelme olasılığı:"+((double)yazi/toplam));
System.out.println("Tura gelme olasılığı:"+((double)tura/toplam));

Çıktı:

Toplam Deneme:10
Yazı sayısı:8
Tura sayısı:2
Yazı gelme olasılığı:0.8
Tura gelme olasılığı:0.2Şimdi büyük sayılar kanuna göre deneme sayısı arttıkça olasılıkların 0.5'e yakınsaması gerekiyor. Deneme sayısını 1000'e çıkartıyorum:

Not: sadece for döngüsünün dönme sayısını değiştirerek bozuk para sayısını değiştirebilirsiniz. Tüm kodları tekrar yazmıyorum, sadece sonuçlarını yazıyorum.

Örnek: İstatistik ve bozuk para atımına dair Java kodlamalarına devam (1000 adet bozuk para atıldı)

Toplam Deneme:1000
Yazı sayısı:493
Tura sayısı:507
Yazı gelme olasılığı:0.493
Tura gelme olasılığı:0.507

Örnek: Bozuk para sayısı 100.000 oldu:

Toplam Deneme:100000
Yazı sayısı:50005
Tura sayısı:49995
Yazı gelme olasılığı:0.50005
Tura gelme olasılığı:0.49995

Örnek: 10 milyon adet bozuk para için:

Toplam Deneme:10000000
Yazı sayısı:4999681
Tura sayısı:5000319
Yazı gelme olasılığı:0.4999681
Tura gelme olasılığı:0.5000319

Örnek: 1 milyar adet bozuk para için:

Toplam Deneme:1000000000
Yazı sayısı:500002392
Tura sayısı:499997608
Yazı gelme olasılığı:0.500002392
Tura gelme olasılığı:0.499997608

Sonuç: İstatistik yalan söylemez :) Birazdan daha çok sonuçlu bir deney yapacağım, zar atma simülasyonu.

 

 

 

utku33

10.02.2020 00:26

Bu soru 2 kez yanıtlandı.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
Java ile Yazı Tura Gelme Olasılığını Hesaplamak

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.