伪随机数(线性同余法)

Posted lort

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了伪随机数(线性同余法)相关的知识,希望对你有一定的参考价值。

/*
*Keil Lib
*2015.6.12
*Pass
*by lort
*/
uint32 Srandx ;
uint32 SrandK = 1103515245;//0x41C64E6D;
uint32 SrandB = 12345;//0x3039; 

void os_srand(uint32 seek)
{
    Srandx =seek;
}
uint32 os_rand (void)
{
    Srandx = Srandx *SrandK +SrandB ;
    return (Srandx>>1);

/*
*IAR Lib
*2015.6.13
*Pass
*by lort
*/

uint32 Srandx = 1;
uint32 SrandK = 0x0019660D;
uint32 SrandB = 0x3C6EF35F;
uint32 Srandy;
uint32 randTable[32];
void os_srand(uint16 seek)
{
  uint8 i;
  Srandx = seek;
  for(i=0;i<8;i++)
  {
    Srandx = Srandx*SrandK+SrandB;
  }
  for(i=0;i<32;i++)
  {
    Srandx = Srandx*SrandK+SrandB;
    randTable[i] = Srandx;
  }
  Srandy = Srandx;   
}
uint16 os_rand(void)
{
  uint8 id;
  id = (Srandy&0x0000001f);
  Srandx = Srandx*SrandK+SrandB;
  Srandy = randTable[id];
  randTable[id] = Srandx;//更新表
  return (Srandy>>16)&0x7fff;
}

以上是关于伪随机数(线性同余法)的主要内容,如果未能解决你的问题,请参考以下文章

伪随机数生成算法-梅森旋转(Mersenne Twister/MT)

LevelDB源码阅读Random

线性同余法产生1000个随机数

采样

解密随机数生成器——从java源码看线性同余算法(转)

伪随机数