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

  • FPSRussia

    FPSRussia

    19 NİSAN 2010
  • HowtoDrawAndPaint

    HowtoDrawAnd

    24 EKİM 2010
  • Mega64

    Mega64

    24 ŞUBAT 2006