Bilgisayarda Rastgele Sayı Nasıl Üretilir? Sözde Rastgele Sayılar
Bilgisayar, talimatları harfiyen uygulayan bir makinedir. Peki nasıl yazı tura atabiliyor, zar atabiliyor ya da rastgele bir isim seçebiliyor? Kısa cevap şu: Çoğu zaman gerçekten rastgele sayılar üretmiyor. Yalnızca rastgele görünen sayılar üretiyor ve çoğu iş için bu yeterli. Bu yazıda rastgele sayı üreteçlerinin nasıl çalıştığını, nerede yanılabileceklerini ve bu sitedeki araçların sonuçlarını nasıl seçtiğini anlatıyoruz.
İki tür rastgelelik
- Gerçek rastgele sayılar kimsenin tahmin edemeyeceği fiziksel bir olaydan gelir: bir devredeki elektriksel gürültü, radyoaktif bozunma ya da atmosferdeki radyo paraziti. Örneğin Random.org atmosferik gürültüyü kullanır.
- Sözde rastgele sayılar bir formülden gelir. Tohum (seed) denen bir sayıyla başlarsınız, onu formülden geçirirsiniz ve bir sonraki sayıyı, ardından bir sonrakini elde edersiniz. Sonuç rastgele görünür, ama aynı tohum her zaman aynı diziyi verir.
Sözde rastgelelik hile gibi gelebilir, ama neredeyse her oyun, uygulama ve simülasyon bunu kullanır. Hızlıdır ve iyi bir formül, gerçek rastgeleliğin geçtiği istatistiksel testlerden geçer.
İlk bilgisayar yöntemi ve kusuru
1949 civarında matematikçi John von Neumann orta kare yöntemini önerdi: Bir sayının karesini alın, ortadaki basamakları seçin ve tekrarlayın. 1234 ile başlayalım: Karesi 01522756 olduğu için sonraki sayı 5227 olur, ardından 3215, 3362, 3030 diye devam eder.
Rastgele görünür, ama döngülere düşer. 2916 ile başlarsanız 5030, 3009, 0540, 2916 gelir ve sonra aynı dört sayı sonsuza kadar tekrar eder. Von Neumann bunu biliyordu. Yöntemi hızlı olduğu için kullandı ve çıktıyı sorunlara karşı kontrol etti. Ünlü esprisine göre aritmetikle rastgele sayı üretmeye çalışan herkes “günah içindedir”.
Bilgisayarlardan önce: Rastgele sayı kitapları
Bilim insanlarının rastgele sayılara o kadar çok ihtiyacı vardı ki bu sayılar kitap olarak basılıyordu. 1955’te RAND Corporation, elektronik bir rulet çarkıyla hazırlanan A Million Random Digits with 100,000 Normal Deviates adlı kitabı yayımladı. Araştırmacılar rastgele bir sayfa açıp rakamları sırayla okurdu. Bundan çok önce de insanlar zar, madeni para ve kura kullanıyordu; bunu antik çağda zar kehaneti yazımızda okuyabilirsiniz.
Modern üreteçler nasıl çalışır
Bugünün sözde rastgele sayı üreteçleri çok daha iyidir. Yaygın olanlardan bazıları:
- Mersenne Twister: Python’da ve birçok başka araçta varsayılan üreteçtir. Ancak 219937 − 1 sayıdan sonra kendini tekrar eder; bu, yaklaşık 6.000 basamaklı bir sayıdır.
- xorshift128+: Chrome’da ve V8 motoru üzerine kurulu diğer tarayıcılarda Math.random() fonksiyonunun arkasındaki üreteçtir. Çok hızlıdır, oyunlar ve animasyonlar için iyidir.
- Kriptografik üreteçler: Şifreler ve şifreleme anahtarları için kullanılan türdür. İşletim sisteminiz, donanımdaki küçük zamanlama farkları gibi öngörülemeyen fiziksel olayları işin içine katar; böylece formülü bilen biri bile sonraki sayıyı tahmin edemez.
Sıradan üreteçler bir oyun için yeterlidir. Ama biri çıktılarından yeterince görürse bazen geri kalanını çıkarabilir. Adaletin ya da güvenliğin önemli olduğu her durumda doğru seçim kriptografik üreteçtir.
Gizli bir tuzak: Modülo yanlılığı
Kusursuz bir üreteç bile dikkatsiz kullanılırsa adil olmayan sonuçlar verebilir. Diyelim ki elinizde rastgele bir bayt, yani 0 ile 255 arasında bir sayı var ve bir zar atışı istiyorsunuz. En kolay yol 6’ya bölüp kalanı kullanmaktır. Ama 256, 6’ya tam bölünmez; bu yüzden yüzlerden dördü birer fazla şans alır:
| Yüz | Olasılık |
|---|---|
| 1, 2, 3 veya 4 | her biri 256’da 43 (%16,8) |
| 5 veya 6 | her biri 256’da 42 (%16,4) |
Fark küçüktür, ama binlerce atışta kendini gösterir. Çözümü basit: Rastgele sayı eşit bölünmeyen artık kısma düşerse atılır ve yeniden çekilir. Buna reddetme örneklemesi denir.
Araçlarımız nasıl seçiyor
Yazı Tura, Zar At, Rastgele Sayı Üretici, Rastgele İsim Seçici ve aynı kodu paylaşan diğer araçlarımız, tarayıcınızın crypto.getRandomValues adlı kriptografik üretecini kullanır. Ayrıca reddetme örneklemesi uygular; böylece her yüzün, sayının ve ismin şansı tam olarak eşittir. Bu özelliği olmayan eski tarayıcılar Math.random() ile çalışır. Her şey kendi tarayıcınızda çalışır; sunucumuzda hiçbir şeye karar verilmez.
Peki gerçekten rastgele mi?
Yazı tura ya da zar atışı için iyi bir üreteç gerçeğinden daha iyidir. Gerçek madeni paralar, yazı tura olasılığı yazımızda anlatıldığı gibi, atışa başladıkları yüze doğru çok küçük bir eğilim gösterir; gerçek zarlar da hafifçe dengesiz olabilir. İyi bir üreteçte bu sorunların hiçbiri yoktur.
Asıl risk sonuçları okuyan kişidir. Serilerde örüntüler görür ve “eksik” sonucun sırasının geldiğini düşünürüz. Buna kumarbaz yanılgısı denir ve insanları herhangi bir bilgisayardan çok daha sık yanıltır. İnsanların kafadan rastgele sayı uydurmakta ne kadar kötü olduğunu görmek için “İnsanlar rastgele seçebilir mi?” yazımızı okuyun.
Sık Sorulan Sorular
Bilgisayar gerçekten rastgele sayı üretebilir mi?
Tek başına bir formülle üretemez. Formüller yalnızca rastgele görünen sözde rastgele sayılar verir. Gerçek rastgelelik için bilgisayarlar elektriksel gürültü gibi öngörülemeyen fiziksel olayları ölçer ve birçok cihazda bunun için donanım bulunur.
Rastgele sayı üretecinde tohum (seed) nedir?
Formülün başlangıç sayısıdır. Aynı tohum her zaman aynı diziyi verir. Bu, test yaparken ve bir dünyayı ya da bölümü tohumuyla paylaşmanıza izin veren oyunlarda işe yarar.
Math.random() gerçekten rastgele mi?
Hayır. Hızlı bir sözde rastgele sayı üretecidir; oyunlar için uygundur, ama gizli bir şey ya da paranın söz konusu olduğu durumlar için uygun değildir. Bunun için tarayıcılar crypto.getRandomValues sunar.
İnternetteki yazı tura ve zar araçları adil mi?
İyi yapılmışsa evet. Yazı tura ve zar araçlarımız, tarayıcının kriptografik üretecini reddetme örneklemesiyle birlikte kullanır; böylece her sonucun şansı tam olarak eşittir.
Modülo yanlılığı nedir?
Rastgele bir sayıyı bölümden kalanı kullanarak daha küçük bir aralığa sıkıştırdığınızda ve aralık tam bölünmediğinde ortaya çıkan küçük bir adaletsizliktir. Reddetme örneklemesi bunu ortadan kaldırır.