伪随机数(线性同余法)C语言

/*
*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;
}

转载于:https://www.cnblogs.com/lort/p/5579575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值