此源码为基础底层代码贴,没有应用代码。是作为运行库使用的。
一:易原生随机数特性
易语言生成随机数,其实为平均分布的随机数。
即是为多个随机数是满足平均分布规律的,也就是说所有范围内的数都是一样多的。
下图为100万个易随机数的,概率分布图。
二、随机数的应用
由上可以看出,虽然规律很好。但这样的分布规律并不能满足我们所有的需求。
我们需要在某些时候让一些区域分布减少或都加。平均随机数就不能满足我们需求了。
比如,
1、发牌时,可以让一些牌发放机率高,一些牌机率低。
2、验证码生成时,可以让一些因素生成高,一些低。
3、抽奖时,可以让一些数字高,一些数据字,甚至是没有。
(虽然看起来数据都是随机杂乱的,但是经过概率设定,可以是完全没有),这样一想大多数的抽奖软件,背后操作空间真是太大了。
4、所有需用随机数的地方都可以用到。
三、统计学常用的随机分布
以下只贴几个数学上常用的随机数的分布图形。这些都只需作为了解
四、任意分布随机数
这里说的是本文的重点。
本模块源码重点包含两块算法:
1、正态随机数的算法生成(多次单个随机数生成)
单个点生成点的概率按正态分布,无数个后统计规律呈现正态分布特性。
基于Box–Muller变换的正态随机数生成方法
2、任意分布随机数的类(一次多个随机数生成)
任意随机数的生成算法,这里就不详讲,算法是我自创。各位不用非得理解里面的算法。
这算法没有数字理论证明,在数学应用上是不存在"任意分布随机数"的算法的。
也不存在统一的数学算法,那是因为绝大多数的概率密度函数是不可计算反函数。
而要正面生成概率随机数,就必须得到概率分布函数的反函数。这就是几乎不可能做到的事。
(这一点可以在正态分布随机数源码中看得到)
我使用的算法是我自创的,算法并不复杂,但算法很抽象。重在于快速、稳定、可靠。(源码各位能理解就理解,理解不了,直接调用就行)
实际无数次使用完全符合理论分布规律,各位可以随意点击尝试分布曲线,是否是按预设的一样。
|