Chinaunix首页 | 论坛 | 博客
  • 博客访问: 83089
  • 博文数量: 28
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 13:54
文章分类

全部博文(28)

文章存档

2011年(1)

2010年(8)

2009年(19)

我的朋友

分类: C/C++

2009-11-28 15:00:37

//RandomNumber.h

#ifndef RANDOMNUMBER_H_
#define RANDOMNUMBER_H_

class RandomNumber
{
public:
    RandomNumber(unsigned long s=0);
    virtual ~RandomNumber();
    unsigned short Random(unsigned long n);//random number between [0,n)

    unsigned short Random(unsigned long m,unsigned n);//random number between [m,n]

    double fRandom(void);
private:
    unsigned long randSeed;//Current seed

};

#endif /*RANDOMNUMBER_H_*/





//RandomNumber.cpp

#include "RandomNumber.h"
#include <ctime>

typedef const unsigned long Long;
Long maxshort=65536L;
Long multiplier=1194211693L;
Long adder=12347L;

RandomNumber::RandomNumber(unsigned long s)
{
    if(0==s)
    {
        randSeed=time(NULL);
    }
    else
    {
        randSeed=s;
    }
}

RandomNumber::~RandomNumber()
{
}

unsigned short RandomNumber::Random(unsigned long n)
{
    randSeed=multiplier*randSeed+adder;
    return (unsigned short)((randSeed>>16)%n);
}

unsigned short RandomNumber::Random(unsigned long m,unsigned n)
{
    if(m>n)
    {
        return -1;
    }
    if(m==n)
    {
        return m;
    }
    return Random(n-m+1)+m;
}

double RandomNumber::fRandom(void)
{
    return Random(maxshort)/double(maxshort);
}


阅读(2727) | 评论(0) | 转发(1) |
0

上一篇:随机算法

下一篇:Ubuntu Php installation

给主人留下些什么吧!~~