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

  • ::..ηєѕѕ мιχ..::

    ::..ηєѕѕ

    15 Aralık 2006
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • Project Mooncircle

    Project Moon

    6 Aralık 2009