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

  • fireflame65

    fireflame65

    27 Mart 2007
  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008