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