自己实现随机数

随机数函数rand大家一定都使用得炉火纯青了,但是如何你想自己实现一个rand函数该怎么办呢?这篇文章让我来简单介绍一下随机数的常用生成方法

最近工作太忙,几乎没精力写文章,竟然有人催更,好在这段时间也没人取关,哈哈,那就小更一篇吧。

真假随机数

其实计算机中的随机数都是伪随机数,因为它并不是真正随机的。只有完全无法预测下一次的数字才能算是真正的随机数。相抵比较”真随机”的方法有:通过当前温度+PM2.5+风力…、CPU温度+内存条温度+…。重点在于无法预测,但是这些随机数获取的成本也相对比较大。

线性同余法

大部分语言的随机数都是通过”线性同余法”生成的,这是什么鬼方程(哪位好学生给科普一下)?我们不管原理,只管实现~线性同余法的方程为:N2 = (A X N1 + B) % M,仅当B能够被A与M的最大公约数整除,此方程有解。我们只要保证A和M互质就可以了。

下面是我用PHP的简单实现,如有错误,随便指出:

/** * 伪随机数 * @author zhjx922 */class Rand { private $_sRand; public function __construct() { $this->_sRand = substr(microtime(true), -3); } /** * 种子生成器 * @return string */ private function sRand() { $a = 33773; $b = 97613; $m = 65536; $this->_sRand = bcmod(bcadd(bcmul($a, $this->_sRand), $b), $m); return $this->_sRand; } /** * 查询随机数 * @param $start * @param $end * @return string */ public function rand($start, $end) { if($start == $end) { return $start; } if($start > $end) { $max = $start; $min = $end; } else { $max = $end; $min = $start; } $sub = $max – $min; return (int)bcmod($this->sRand(), $sub + 1) + $min; }}$rand = new Rand();$randNum = array();for($i=0;$irand(-50, -66); if(isset($randNum[$num])) { $randNum[$num]++; } else { $randNum[$num] = 1; }}ksort($randNum);var_dump($randNum);

大家可以复制代码到本地跑一下,看看生成的效果如何,生成的随机数是否足够”随机”

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年6月27日 15:07
下一篇 2022年6月27日 15:08

相关推荐

  • 分享4条发微商朋友圈的方法(微商朋友圈应该怎么发)

    对于微商朋友来说,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底该怎么发呢? 为什么同样是经营一个朋友圈,有的微商看起来逼格满满,实际效果也不错;而有的却动都不动就被屏蔽甚至拉黑…

    2022年11月27日
  • cad连续标注快捷键(cad连续标注快捷键)

    本文主要讲的是cad连续标注快捷键,以及和cad连续标注快捷键相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 cad中连续标注快捷键 CAD尺寸标准快捷命令:DL…

    2022年11月27日
  • 存储过程语法(sql server存储过程语法)

    今天小编给各位分享存储过程语法的知识,其中也会对sql server存储过程语法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! oracle存储过程基本语法…

    2022年11月26日
  • 《宝可梦朱紫》梦特性怎么获得?隐藏特性获取方法推荐

    宝可梦朱紫里有很多宝可梦都是拥有梦特性会变强的宝可梦,很多玩家不知道梦特性怎么获得,下面就给大家带来宝可梦朱紫隐藏特性获取方法推荐,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 …

    2022年11月25日
  • 《宝可梦朱紫》奇鲁莉安怎么进化?奇鲁莉安进化方法分享

    宝可梦朱紫中的奇鲁莉安要怎么进化呢?很多玩家都不知道,下面就给大家带来宝可梦朱紫奇鲁莉安进化方法分享,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 奇鲁莉安进化方法分享 奇鲁莉安…

    2022年11月25日
  • 为什么空调不买小米(小米空调质量怎么样)

    小米在业内的名气度正在与日俱增,如今在空调领域的发展也是让人出乎意料。当然,网上关于小米空调的相关信息确实比较少,导致很多想要入手的朋友仍在观望状态。那么,小米空调质量怎么样,值不…

    2022年11月25日
  • 《宝可梦朱紫》暴飞龙怎么抓?暴飞龙获得方法

    宝可梦朱紫暴飞龙位置在哪?在游戏中,很多玩家还不清楚暴飞龙具体要怎么样获得,其实获得方法很简单,暴飞龙直接是没得抓的,需要玩家从宝贝龙进化得到,下面一起来看一下宝可梦朱紫暴飞龙获得…

    2022年11月23日
  • 《宝可梦朱紫》布土拨怎么进化?布土拨进化方法介绍

    宝可梦朱紫中,不同的宝可梦有不同的进化方法,其中布土拨的进化方法是比较特殊的。很多玩家不知道宝可梦朱紫布土拨怎么进化,下面就带来宝可梦朱紫布土拨进化方法介绍,一起来看看吧,希望能帮…

    2022年11月23日
  • 《宝可梦朱紫》薄荷怎么获得?薄荷获得方法

    宝可梦朱紫中薄荷有改变宝可梦的属性或性格等效果,很多玩家想知道宝可梦朱紫薄荷怎么获得,下面就带来宝可梦朱紫薄荷获得方法,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 薄荷获得方法…

    2022年11月23日
  • 《宝可梦朱紫》怎么交换精灵?交换精灵方法一览

    宝可梦朱紫中玩家可以和好友或者npc进行交换宝可梦获得自己没有的宝可梦,很多玩家想知道宝可梦朱紫怎么交换精灵,下面就带来宝可梦朱紫交换精灵方法一览,感兴趣的小伙伴不要错过,希望能帮…

    2022年11月23日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息