Sözde rastgele nedir?

Sözde rasgele sayılar bilgisayarlar tarafından üretilir. Gerçekten rastgele değiller, çünkü bir bilgisayar doğru çalışıyorsa, yaptığı hiçbir şey rastgele değildir. Bilgisayarlar deterministik cihazlardır - bilgisayarın davranışı tasarım açısından tamamen öngörülebilirdir. Tahmin edilemez bir şey yaratmak için, bilgisayarlar "yeterince rasgele" sayılar üretmek için matematiksel algoritmalar kullanır.

Sözde rasgele sayılar, oyunlar ve güvenlik gibi birçok bilgisayar uygulaması için önemlidir. Oyunlarda, rastgele sayılar, rastgele bir kurşundan kaçmak veya destenin tepesinden bir kart çekmek gibi oyuncunun yanıt verebileceği öngörülemeyen unsurlar sağlar.

Bilgisayar güvenliğinde, sözde rastgelelik, tahmin edilmemesi veya tahmin edilmemesi gereken kodlar oluşturan şifreleme algoritmalarında önemlidir.

Bir PRNG nedir?

Sözde rastgele sayı üreteci veya PRNG, rastgeleliği simüle etmek için matematiği kullanan herhangi bir program veya işlevdir. Ayrıca bir DRNG (dijital rasgele sayı üreteci) veya DRBG (deterministik rastgele bit üreteci) olarak da adlandırılabilir.

Matematik bazen karmaşık olabilir, ancak genel olarak, bir PRNG kullanmak sadece iki adım gerektirir:

  1. PRNG'ye keyfi bir tohum verin.
  2. Bir sonraki rastgele numarayı isteyin.

Tohum değeri rasgele sayılar oluşturmak için bir "başlangıç ​​noktasıdır". Değer, sayıları hesaplarken kullanılır. Tohum değeri değişirse, üretilen sayılar da değişir ve tek bir tohum değeri her zaman aynı sayıları üretir. Bu nedenle, sayılar gerçekten rastgele değildir, çünkü gerçek rastgelelik asla yeniden yaratılamaz.

Şimdiki zaman genellikle benzersiz bir tohum değeri olarak kullanılır. Örneğin, eğer 5 Mart 2018, 5:03 PM ve 7, 01324 saniye UTC'de, bu bir tamsayı olarak ifade edilebilir. Bu kesin zaman bir daha asla gerçekleşmeyeceğinden, bu tohumla bir PRNG benzersiz bir rastgele sayı kümesi üretmelidir.

Not: Rasgele oluşturulmuş bir diziyi yeniden üretebilmek faydalı olabilir. Akademik uygulamalarda, bir simülasyon için büyük bir rasgele değerler dizisi oluşturulabilir, daha sonra tam olarak daha ayrıntılı analiz için çoğaltılabilir. Başka bir örnek olarak, bilgisayar oyunlarında, bir oyuncu kaydedilmiş bir oyunu yüklerse, "rastgele" herhangi bir olay, oyun hiç durmamış gibi olabilir. Bu şekilde, oyuncu daha iyi şanslar denemek için aynı oyunu tekrar tekrar yükleyemez.

Sözde rasgele sayı üretme

Aşağıda, ortak programlarda ve programlama dillerinde sözde rasgele bir sayı oluşturabilirsiniz.

Windows Komut İstemi

Windows komut isteminde veya bir toplu iş dosyasında, % RANDOM% özel ortam değişkeni, komut isteminin başlatıldığı zamanla birlikte tohumlanan, 0 ile 32767 arasında sahte rasgele bir sayı üretir.

 echo "Yani% RANDOM%!" 
 "Öyleyse 27525!" 

1 ile 100 arasında rasgele bir sayı üreten bir toplu iş dosyası oluşturmak için:

 copy con sorandom.bat eko kapalı ayarla / a myrand =% RANDOM% * 100/32768 + 1 echo Düşündüğüm sayı% myrand% idi. Doğru aldın mı? 

Toplu iş dosyasını kaydetmek için Ctrl + Z ve Enter tuşlarına basın. Ardından, dosyayı yürütün:

 rastgele 
 Düşündüğüm sayı 91'di. Doğru mu aldın? 

Windows PowerShell

Get-Random cmdlet'i, 0 ile 2, 147, 483, 647 (işaretsiz bir 32 bit tamsayının maksimum değeri) arasında rasgele bir sayı oluşturur.

 Get-Random 
 1333190525 

Cmdlet, minimum ve maksimum değer gibi bir dizi seçenek alır. Değerler aşağı yuvarlanır, bu nedenle 1 ile 100 arasında bir sayı oluşturmak için maksimum değerini 101'e ayarlayın:

 Rastgele Alın -Minimum 1 -Maksimum 101 
 99 

Microsoft Excel

Bir Excel elektronik sayfasında, formül = RAND (), 0 ile 1 arasında rasgele bir sayı oluşturur. Örneğin, bir hücreyi vurgulayıp, = RAND () girerseniz, hücre, sayfa yeniden açıldığında değişecek bir sayı içerir. -calculated.

Bu yöntem aynı zamanda LibreOffice Calc ve Google Sheets dahil diğer elektronik tablo uygulamalarında da çalışır.

Programlama dillerinde

Çoğu programlama dilinin kendi PRNG işlevi vardır. İşte bazı yaygın örnekler:

C

C programlama dilinde, PRNG fonksiyonları standart kütüphanede stdlib ile tanımlanır. Rastgele jeneratörü tohumlamanın yaygın yolu, time.h dosyasında bildirilen time () işleviyledir. Üretilen sayı, 0 ile sabit RAND_MAX arasında, en azından 32767 olması garantili olan sisteme özgü bir tamsayı arasında yer alıyor.

 #include #include #include void main () {srand (time (NULL)); / * jeneratörü tohumla * / int rand1 = rand (); / * 0 ile RAND_MAX * / printf arasında bir sahte tamsayı ("0 ile% d arasında rasgele sayı:% d \ n", RAND_MAX, (int) rand1); / * Veya belirli bir aralıkta: * / int min = 0; int maks = 100; şamandıra rand2 = (şamandıra) rand () * maks / RAND_MAX + 1; int yuvarlak = (int) rand2; printf ("% d ile% d arasında rasgele sayı:% d (% f) \ n", min, maks, yuvarlak, rand2); dönüş; } 

Çıktı:

 0 ile 2147483647: 1789080047 arasındaki rasgele sayı 0 ile 100: 74 arasındaki rasgele sayı (74.369179) 

C ++

C ++ dilinde:

 #include #include #include int main () {srand (zaman (NULL)); std :: cout << "0 ile" << RAND_MAX << "için rasgele sayı <<": "<< rand () <<" \ n "<<" 1 ile 100 arasında rasgele sayı: "<< (rand ()% 100) + 1 << std :: endl; 0 döndür; } 

Çıktı:

 0 ile 2147483647: 126569208 arasındaki rasgele sayı 1 ile 100: 9 arasındaki rasgele sayı 

Python 3

Python'daki rasgele modül, rasgele sayılar üretmek için çeşitli işlevler sunar. Bu örnekte, bir aralıktaki rastgele bir tamsayı bulmak için üç farklı yöntem kullanıyoruz.

 datetime'dan rasgele içe aktarma datetime'dan içe aktarma random.seed (datetime.now ()) print ("Aralıktaki rastgele sayı [0, 1):", random.random ()) # Bir aralıkta. Bunların hepsi aynı şeyi yapar: baskı ("1 ile 100 arasında rasgele sayı:", yuvarlak (random.random () * 100) + 1) baskı ("1 ile 100 arasında rasgele sayı:", random.randrange (1, 101)) print ("1 ile 100 arasında rasgele sayı:", random.randint (1, 100)) 

Çıktı:

 Aralıktaki rastgele sayı [0, 1): 0, 05137418896158319 1 ila 100: 27 arasındaki rasgele sayı 1 ila 100: 80 arasındaki rasgele sayı 1 ila 100: 80 arasındaki rasgele sayı 

Perl 5

Perl'de:

 srand (zaman); # saniyede bir kez değişir "Rastgele sayı [0, 1):", rand (), "\ n"; "[1, 100] aralığında rasgele sayı:", int (rand (101)), "\ n"; 

Çıktı:

 Aralıktaki rasgele sayı [0, 1): 0, 691379946963028 Aralıktaki rasgele sayı [0, 100]: 82 

JavaScript

 console.log ("Aralıktaki rastgele sayı [0, 1):" + Math.random ()); console.log ("[1, 100] aralığında rasgele sayı:" + Math.floor (Math.random () * 101)); 

Çıktıyı web tarayıcınızın JavaScript konsolunda görüntüleyin (örneğin, Firefox'ta Ctrl + Shift + K tuşlarına basın):

 Aralıktaki rasgele sayı [0, 1): 0, 305008216755414 Aralıktaki rasgele sayı [1, 100]: 8 

Not: Math.random () işlevini JavaScript'te tohumlamak mümkün değildir. JavaScript'te sağlam bir PRNG'ye ihtiyacınız varsa, GitHub'ta JavaScript için daha iyi rasgele sayıları inceleyin.

Örnek PRNG: JavaScript gereci

Aşağıdaki widget'ı kullanarak bir PRNG çekebilir ve rastgele sayılar oluşturmak için kullanabilirsiniz.

Her bir tohumdan rastgele bir sayı ürettiğinizde, ofseti 1 ile artar. Tohumdan oluşturulan ilk numara sıfır, ikinci ofset 1, vb. Üretilir. Jeneratör her zaman belirli bir tohum ve ofset için aynı sayıyı üretir. .

Benzersiz bir tohum oluşturmak için alana istediğiniz bir şey girin.

Bu tohumu kullanarak bir sonraki rasgele sayıyı elde etmek için Üret düğmesini kullanın ve ofseti arttırın.

Ofseti sıfırlamak için Sıfırla düğmesini kullanın.

tohumdan üretilen sayı :

Tohum ofsetini sıfırla (şu anda 0 )

Bu widget Johannes Baagan’ın açık kaynaklı PRNG scriptlerini, Alea.js ve Mash.js.

Bilgisayar güvenliği, Programlama, Yazılım şartları