Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7045
  • 博文数量: 1
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-02 18:06
文章分类
文章存档

2009年(1)

我的朋友
最近访客

分类:

2009-03-23 14:20:56

产生随机数最简单的方法是线性同余发生器:
Xi+1 = AXi mod M
前一个随机数Xi用于产生后一个随机数Xi+1,X0称为种子,一般使用系统时钟或1。
Lehmer 建议使用素数 M = 2 147 483 647, A = 48 271 。
为了避免32位机的溢出一般使用如下函数生成随机数:
static unsigned long Seed = 1;
#define A 48271L
#define M 2147483647L
#define Q ( M / A )
#define R ( M % A )
double Random( void )
{
       long TmpSeed;
       TmpSeed = A * ( Seed % Q ) - R * ( Seed / Q );
       if ( TmpSeed >= 0)
            Seed = TmpSeed;
       else
            Seed = TmpSeed + M;
       return ( double ) Seed / M;
}
void Initialize ( unsigned long InitVal )
{
        Seed = InitVal;
}

阅读(1388) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

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