Bilgisayar rastgele sayıyı nasıl üretiyor?

Foxie

Kilopat
Katılım
26 Ocak 2014
Mesajlar
948
Çözümler
25
Yer
İstanbul
Daha fazla  
Sistem Özellikleri
Asus TUF Gaming X570-PLUS(WI-FI) | Ryzen 7 5800X | Asus ROG Strix RTX 3080 10G LHR | Phanteks P500A DRGB | Corsair Force MP600 1TB SSD | Kioxia Exceria G2 1TB SSD | GSKILL RipjawsV 16x2 32GB 3200Mhz CL16 | Cooler Master G800 800W 80+ Gold | MSI MAG274QRF-QD 2K-165HZ 1ms 27" | Asus TUF Gaming VG259QR FHD - 165HZ 1MS 24.5" | Logitech MX Mechanical Mini | HyperX Pulsefire Raid | Logitech G733
Cinsiyet
Erkek
Meslek
Game Developer
Kafama takıldı, .NET de falan Random sınıfı var rastgele sayı üretmemizi sağlıyor. Next(adını tam hatırlamıyorum) diye bir metodu vardı, ona 2 sayı arasından rastgele sayı üretmesini sağlayabiliyorduk. Bu metod nasıl çalışıyor? Next metodunda nasıl bir işlem yapılıyor da rastgele sayı üretilmesi sağlanıyor. Matematikte sonucu her zaman farklı çıkan bir işlem mi var?
 
Sistem saatinin (clock) virgülden sonra gelen iki hanesini, random metodu çağırıldığında değişkene aktarmak en yaygın yöntem. Elde edilen sayı 0.xx formatında kaydediliyor. Bu sayede random metodu her zaman sıfır ve bir arasında bir değer alıyor.

Bu işi yapmak, assembly seviyesinde oldukça zor. Real ve pseudo random sayı algoritmaları var. Araştırarak bulabilirsiniz.
 
Arkadaşın dediği gibi saat, cpu anlık hızı vs vs milyon tane parametre bu konuda işleme giren değer olabilir. Buradaki tek mühim nokta o kod çalıştırıldığında daha 1 saniye bile geçmeden onlarca defa random sayı üretme fonksiyonuna girecek bir durum varsa ona göre değişeceğini bildiğin bir değişkeni random sayı üretme çarpanına sokman gerek.
 
Konuyu 5 yılın ardından canlandırmak istiyorum, bu mesajımı gören arkadaşlar detaylı bir şekilde anlatabilir mi? Herhangi bir yapay zeka üretmeden tamamen rastgele bir sayı üretmek mümkün müdür? Herhangi bir şeye bağlı kalmadan. Nasıl?
 
Konuyu 5 yılın ardından canlandırmak istiyorum, bu mesajımı gören arkadaşlar detaylı bir şekilde anlatabilir mi? Herhangi bir yapay zeka üretmeden tamamen rastgele bir sayı üretmek mümkün müdür? Herhangi bir şeye bağlı kalmadan. Nasıl?

Bilgisayarın ürettiği rastgele sayıların tümü belli bir algoritmaya göre üretilir ve bunlar gerçek anlamda tamamen bağımsız rassal sayılar değildir. Bu yüzden bu sayıları üreten programlara “sözde rassal sayı üreteci” de denir.

Dediğiniz gibi hiçbir şekilde koşula bağlı kalmadan tamamen rassal bir sayı üretici yoktur ve böyle bir programı yazmak imkansızdır.

Bu konu daha bilgisayarlar yokken bile matematikçilerin tartışıp üzerinde durdukları bir konuydu. Daha detaylı bilgi için aşağıdaki makaleyi okuyabilirsiniz:

https://tr.wikipedia.org/wiki/S%C3%B6zde_rassal_say%C4%B1_%C3%BCreteci
 
Bilgisayarın ürettiği rastgele sayıların tümü belli bir algoritmaya göre üretilir ve bunlar gerçek anlamda tamamen bağımsız rassal sayılar değildir. Bu yüzden bu sayıları üreten programlara “sözde rassal sayı üreteci” de denir.

Dediğiniz gibi hiçbir şekilde koşula bağlı kalmadan tamamen rassal bir sayı üretici yoktur ve böyle bir programı yazmak imkansızdır.

Bu konu daha bilgisayarlar yokken bile matematikçilerin tartışıp üzerinde durdukları bir konuydu. Daha detaylı bilgi için aşağıdaki makaleyi okuyabilirsiniz:

https://tr.wikipedia.org/wiki/S%C3%B6zde_rassal_say%C4%B1_%C3%BCreteci
Gerçekten çok garip bir konu, ilgimi çok çekiyor. Güzel cevabınız için teşekkür ederim.
Sizinle, az önce 2 dakika düşünerek yazmış olduğum, "Random" modülünü kullanmadan rastgele değer üreten bir Python komutu paylaşmak istiyorum. Bu sayı da bağımsız değil. Zamanın mikrosaniye kısmının son iki değerini alıyor ve rastgele değer olarak çıktı veriyor.

Python:
import time
import sys
def random(y=1):
    a = str(time.time()).split(".")[1][::-1][:2]
    b = str(time.time()).split(".")[1][::-1][:3]
    if y<1:
        print("Değer minimum 1 olmalıdır.")
        sys.exit()
    if y!=1:
        while True:
            if int(b[2])<y:
                c = b[2]
                break
            else:
                b = str(time.time()).split(".")[1][::-1][:3]
        print(c + "." + a)
    else:
        print("0." + a)
random()
#İstersen "random()" yazarken parantez içine değer gir, maksimum değer olur. Örneğin "random(5)" yaparsan çıkabilecek maksimum değer 4.99 olur.
 
Son düzenleme:

Geri
Yukarı