此源碼為基礎底層代碼貼,沒有應用代碼。是作為運行庫使用的。
一:易原生隨機數特性
易語言生成隨機數,其實為平均分布的隨機數。
即是為多個隨機數是滿足平均分布規律的,也就是說所有范圍內的數都是一樣多的。
下圖為100萬個易隨機數的,概率分布圖。
二、隨機數的應用
由上可以看出,雖然規律很好。但這樣的分布規律并不能滿足我們所有的需求。
我們需要在某些時候讓一些區域分布減少或都加。平均隨機數就不能滿足我們需求了。
比如,
1、發牌時,可以讓一些牌發放機率高,一些牌機率低。
2、驗證碼生成時,可以讓一些因素生成高,一些低。
3、抽獎時,可以讓一些數字高,一些數據字,甚至是沒有。
(雖然看起來數據都是隨機雜亂的,但是經過概率設定,可以是完全沒有),這樣一想大多數的抽獎軟件,背后操作空間真是太大了。
4、所有需用隨機數的地方都可以用到。
三、統計學常用的隨機分布
以下只貼幾個數學上常用的隨機數的分布圖形。這些都只需作為了解
四、任意分布隨機數
這里說的是本文的重點。
本模塊源碼重點包含兩塊算法:
1、正態隨機數的算法生成(多次單個隨機數生成)
單個點生成點的概率按正態分布,無數個后統計規律呈現正態分布特性。
基于Box–Muller變換的正態隨機數生成方法
2、任意分布隨機數的類(一次多個隨機數生成)
任意隨機數的生成算法,這里就不詳講,算法是我自創。各位不用非得理解里面的算法。
這算法沒有數字理論證明,在數學應用上是不存在"任意分布隨機數"的算法的。
也不存在統一的數學算法,那是因為絕大多數的概率密度函數是不可計算反函數。
而要正面生成概率隨機數,就必須得到概率分布函數的反函數。這就是幾乎不可能做到的事。
(這一點可以在正態分布隨機數源碼中看得到)
我使用的算法是我自創的,算法并不復雜,但算法很抽象。重在于快速、穩定、可靠。(源碼各位能理解就理解,理解不了,直接調用就行)
實際無數次使用完全符合理論分布規律,各位可以隨意點擊嘗試分布曲線,是否是按預設的一樣。
|