c语言10以内随机数生成器,C语言随机数生成器
目前所看到的所有公開的關(guān)于C隨機(jī)數(shù)生成器的中文資料,都提到經(jīng)典的線性同余法( LCG, linear congruential generator),并認(rèn)為是默認(rèn)的實(shí)現(xiàn)方法。這個(gè)說法并不準(zhǔn)確。
線性累加反饋法
線性累加反饋法,即LAFM(linear additive feedback method),以下是GLIBC使用的線性累加反饋法的流程描述。其中,2147483647 = 2^31 – 1,4294967296 = 2^32. 所有變量都是整數(shù)。
GLIBC的實(shí)現(xiàn)
GLIBC實(shí)現(xiàn)了以上兩種算法。LAFM生成器標(biāo)記為 TYPE1, TYPE2, TYPE_3 和 TYPE4 類型,LCG 生成器標(biāo)記為 TYPE0。相比LCG,LAFM生成器預(yù)先生成有很多初始狀態(tài),消除了LCG生成器的周期性遍歷的屬性,在同一個(gè)周期內(nèi),可以多次獲取到相同的隨機(jī)數(shù)。為了提高隨機(jī)數(shù)生成的時(shí)間和空間效率,在計(jì)算偽隨機(jī)序列時(shí)GLIBC使用指針指向包含前驅(qū)隨機(jī)值的數(shù)組,寫法與按上述公式步驟直譯的方式有所不同。
LCG生成器狀態(tài)數(shù)組
LCG生成器在狀態(tài)數(shù)組(buf->state)長度為8字節(jié)時(shí)才會(huì)使用。 狀態(tài)數(shù)組長度更大時(shí)則會(huì)啟用LAFM生成器。通常在使用rand()方法時(shí),會(huì)使用srand()設(shè)置種子常量,這時(shí)狀態(tài)數(shù)組默認(rèn)就是128字節(jié), 所以實(shí)際會(huì)啟用LAFM生成器。
線性同余法
由于LCG計(jì)算簡單,極省內(nèi)存,很適合內(nèi)存和計(jì)算資源比較緊張的嵌入式環(huán)境。但LCG有一個(gè)嚴(yán)重的缺陷,即產(chǎn)生的偽隨機(jī)數(shù)強(qiáng)依賴于上一次生成的隨機(jī)數(shù),且重復(fù)周期等于隨機(jī)范圍,不能用于隨機(jī)數(shù)要求高的場(chǎng)合。
總結(jié)
以上是生活随笔為你收集整理的c语言10以内随机数生成器,C语言随机数生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看电影学外语6部曲
- 下一篇: 知识点滴 - 性格分析: MBTI模型