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

  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • RickardRick

    RickardRick

    9 Mart 2007
  • Vsauce

    Vsauce

    30 Temmuz 2007