SORU
27 Kasım 2008, PERŞEMBE


Srand başlatmak için önerilen yol?

"İyi" bir sözde rasgele sayı üreteci başlatmak için C . ihtiyacım var an article devletler buldum:

Rastgele gibi oluşturmak için sayılar, genellikle srand başlatıldı bu gibi kendine özgü bazı değer, yürütme zamanı ile ilgili. İçin örneğin, bu değeri tarafından döndürülen zaman (başlığında ilan fonksiyonu ctime) farklı her saniye, en belirgin yeterlidir randoming ihtiyacı var.

Unixtime benim uygulama için yeterince ayırt edici değil. Bu başlatmak için daha iyi bir yolu nedir? Bonus taşınabilir olursa puan, ama bu kod öncelikle Linux bilgisayarlar üzerinde çalışıyor olacak.

Bazı pıd/unixtime matematik /dev/urandom bir int, ya da muhtemelen okuma veri elde etmek için yaptığını düşünüyordum.

Teşekkürler!

EDİT

Evet, aslında ikinci bir kez uygulama benim birden başladım ve çarpışmalar karşılaştım.

CEVAP
27 Kasım 2008, PERŞEMBE


Bu sık sık çalışan küçük bir komut satırı programları (birden çok kez ikinci) için kullandım:

unsigned long seed = mix(clock(), time(NULL), getpid());

Nerede karıştırın

// http://www.concentric.net/~Ttwang/tech/inthash.htm
unsigned long mix(unsigned long a, unsigned long b, unsigned long c)
{
    a=a-b;  a=a-c;  a=a^(c >> 13);
    b=b-c;  b=b-a;  b=b^(a << 8);
    c=c-a;  c=c-b;  c=c^(b >> 13);
    a=a-b;  a=a-c;  a=a^(c >> 12);
    b=b-c;  b=b-a;  b=b^(a << 16);
    c=c-a;  c=c-b;  c=c^(b >> 5);
    a=a-b;  a=a-c;  a=a^(c >> 3);
    b=b-c;  b=b-a;  b=b^(a << 10);
    c=c-a;  c=c-b;  c=c^(b >> 15);
    return c;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Film Riot

    Film Riot

    16 NİSAN 2006
  • Fr. Eckle Studios

    Fr. Eckle St

    29 Kasım 2006
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011