2016-04-03 29 views
-1

Rasgele sayılar oluştururken, insanlar önce tohum oluşturmak için srand(int seed) numaralı telefonu arayarak rand(void) numaralı telefonu arayabilir.Pseudo-random işlevi neden bir argüman olarak doğrudan tohumu almıyor?

Sorumu neden tek bir işlevi rand(int seed) olarak kullanmıyorsunuz.

C standart kütüphane işlevi srand işlevini çağırır sanki

uygulama davranmaya edecektir diyerek Anlamadığım bir alıntı vardır.

Bu ifadeyle ilgili bir şey olup olmadığından emin değilim. Sen rand çağrı srand her şey aramak zorunda değilsin

static unsigned long int next = 1; 
int rand(void) // RAND_MAX assumed to be 32767 
{ 
    next = next * 1103515245 + 12345; 
    return (unsigned int)(next/65536) % 32768; 
} 
void srand(unsigned int seed) 
{ 
    next = seed; 
} 
+2

'srand() '(ve“ rand() 'nın kendisi) çağrılmayan kütüphaneyle ilgili kısım muhtemelen“ rand() ”tarafından üretilen dizinin tekrarlanabilirliğini sağlamak için tasarlanmıştır. – EOF

+0

Man sayfaları, tanımladıkları işlevleri kullanmadan önce okunmak üzere var olurlar. Alternatif olarak, nasıl kullanılmaları gerektiğini açıklayan bir C kitap okuyabilirsiniz. Okuduktan sonra, soru teklifinizin niçin - iyi - kötü bir fikir olduğu çok açık olacaktır. – Olaf

cevap

3

:

standart ayrıca statik değişken kullanmak nedenini anlamıyorum bir örnek uygulamasını verir. Aslında çok kötü bir fikir, çünkü aynı tohum her seferinde aynı diziyi veriyor: sabit bir değer yaratırdınız. Yeni bir rastgele değer dizisi oluşturmaya başlamak istediğinizde

srand çağrılmalıdır. Tipik durumda, programın başında bir kez.

Bundan sonra, rand numaralı her arama, sıradaki sonraki numarayı döndürecektir. Bu yüzden burada statik bir değişken var: böylece rand daha önce nereye gittiğini ve bir sonraki sayıyı üretebiliyor.

İlgili konular