1. 程式人生 > >幾種偽隨機數算法

幾種偽隨機數算法

i++ color sna srand private prim mst and gpo

#include <cstdio>
#include <cstdlib>
#include <cstdint>

struct IRandom
{
    virtual void Delete() = 0;

    virtual std::uint32_t Next() = 0;
};

class CRandomStd : public IRandom
{
public:
    CRandomStd(std::uint32_t seed)
    {
        holdrand = seed;
    }
public:
    virtual
void Delete() { delete this; } virtual std::uint32_t Next() { return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff); } private: std::uint32_t holdrand; }; class CRandomPrime : public IRandom { public: CRandomPrime(std::uint32_t seed) { n
= seed; } public: virtual void Delete() { delete this; } virtual std::uint32_t Next() { return n *= 0x9E3779B1; } private: std::uint32_t n; }; class CRandomXorShift : public IRandom { public: CRandomXorShift(std::uint32_t seed) { x = seed; y
= 362436069; z = 521288629; w = 88675123; } public: virtual void Delete() { delete this; } virtual std::uint32_t Next() { std::uint32_t t; t = x ^ (x << 11); x = y; y = z; z = w; return w = w ^ (w >> 19) ^ (t ^ (t >> 8)); } private: std::uint32_t x; std::uint32_t y; std::uint32_t z; std::uint32_t w; }; int main() { srand(10); IRandom* rander = new CRandomStd(10); for (int i = 0; i < 10; i++) { printf("%u %u\n", rander->Next(), rand()); } return getchar(); }

參考:

http://www.cnblogs.com/xkfz007/archive/2012/08/25/2656893.html

http://www.cnblogs.com/forget406/p/5294143.html

http://blog.topspeedsnail.com/archives/1366

幾種偽隨機數算法