在计算机上采用线性同余法,随机数生成算法 —— 线性同余法

最近在做帧同步的实时对战,要自己接管随机数的产生,所以看了一下随机数生成的相关算法。因为游戏会跑在不同平台(iOS/Android)及不同硬件上,所以使用的算法有以下的要求:1. 不能依赖系统;2. 不能依赖硬件;3. 计算中不能使用浮点数(不同平台不同硬件有可能结果不同)。再结合效率方面的考虑,最终选择采用了线性同余算法,并在基础上做了一定的加强。这篇博客主要记录关于这个线性同余算法产生随机数的一些思考。

首先要搞清楚随机数的定义,真正的随机数都不是计算出来的,这里我们说的随机数其实都是伪随机数,随机数伪随机数的定义,具体的论证等资料可以自行查阅。产生伪随机数的算法有很多种,线性同余算法基于整数的加、乘和求模,算法简单但是具有较强的规律性与周期性。怎么在这个基础上尽量降低规律性与周期性,使得在更广范围内覆盖更多可能就是我们的目标。

首先要了解的是线性同余函数公式1d3c28015d36dbad069f1cf555ca8de2.png,最终结果受乘数λ,加数C和模数M决定。M通常我们会使用一个较大的素数,而λ,C的选取在很大程度上会影响生成的随机数的质量。我们尝试使用不同的λ与C去生成一系列的随机数并观察他们。为了直观感受一些列的随机数是否足够随机,我们用这些数字作为X,Y填充一张1024 * 512的位图,观察图上的点的位置,可以得知这一系列随机数在1024 * 512范围内随机分布的情况。

使用最基础的线性同余公式生成的随机数,因乘数λ、加数C参数不同,有的时候比较随机(图一),有的时候呈现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值