目前所看到的所有公开的关于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语言随机数生成器相关推荐

  1. c语言10以内位运算,C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  2. c语言10以内得加法,10以内加法练习题(最新整理)

    <10以内加法练习题(最新整理)>由会员分享,可在线阅读,更多相关<10以内加法练习题(最新整理)(48页珍藏版)>请在人人文库网上搜索. 1.0+0=1+5=9+0=1+0= ...

  3. c语言10以内四则运算,C语言-四则运算

    <C语言-四则运算>由会员分享,可在线阅读,更多相关<C语言-四则运算(10页珍藏版)>请在人人文库网上搜索. 1.四则运算姓名:学 号:班级:1.功能结构图四则运算加法运算减 ...

  4. c语言 10以内加法,求助 给小学生出题,自己选加减乘除 做10题 10以内的数 然后统计分...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include void Menu(void) { printf("1,加法 2,减法 3,乘法 4,除法 ...

  5. 求10以内平均数的c语言,求助 给小学生出题,自己选加减乘除 做10题 10以内的数 然后统计分...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include void Menu(void) { printf("1,加法 2,减法 3,乘法 4,除法 ...

  6. c语言10以内的加法程序代码,怎样用c语言编写个能随机出10以内加减法题目的程序...

    #include "stdio.h" #include "stdlib.h" #include "time.h" #include &quo ...

  7. C语言10以内加法口诀表,10以内加减法口诀表可打印.doc

    1+1=2 2+1=3 1+2=3 10 以 内 加 法 口 诀 表 3+1=4 2+2=4 1+3=4 4+1=5 3+2=5 2+3=5 1+4=5 5+1=6 4+2=6 3+3=6 2+4=6 ...

  8. c语言 10行帕斯卡三角形,C语言帕斯卡三角形打印示例

    帕斯卡三角形是向工程学生教授的典型例子之一. 它有很多的解释. 其中一个着名的是它与二项式方程的使用. 三角形之外的所有值都被认为是零(0). 第一行为0 1 0,而只有1获取帕斯卡三角形中的空格,0 ...

  9. c语言10个数输出最大数,C语言怎么输入十个数输出最大值

    C语言怎么输入十个数输出最大值 C语言求输入的10个数中最大值的编程方法如下: 1.首先需要定义一个整型数组空间,因为这里需要输入十个数,所以数组空间为10个.int a[10]; 2.接着定义一个最 ...

  10. c语言10种复合赋值运算符,C语言复合赋值运算符

    C语言复合赋值运算符 在C语言的赋值中有一种特殊的赋值运算符,就是复合赋值运算符.下面是关于C语言复合赋值运算符的'相关介绍! 复合赋值运算符就是在赋值符"="之前加上其它二目运算 ...

最新文章

  1. 【项目管理】项目经理每天、每周、每月应该做的都在这
  2. 基于Visual Studio2010讲解C#4.0语法(5)--使用CollectionClasses
  3. 颜宁教授当年若当选科学院院士,她还会出走清华吗?
  4. 成功解决h5py\_init_.py:26:FutureWarning: Conversion of the second argument of issubdtype from `float` to
  5. [云炬创业基础笔记]第五章创业机会评估测试8
  6. 【AI芯片格局最全分析】国内AI芯片百家争鸣,何以抗衡全球技术寡头
  7. mysql 5.7.17源码包_centos7 mysql5.7.17源码安装
  8. viper4android fxifi,ViPer4android. FX顶级音效!
  9. WPF系列 自定控件
  10. java程序性能优化_怎么做JAVA程序性能优化
  11. 当你用浏览器打开一个链接的时候,计算机做了哪些工作
  12. 沉浸式状态栏html5实现,Fragment和Activity两种沉浸式状态栏的实现
  13. pytorch torchvision.transforms.CenterCrop
  14. mysql 拼音首字母_Mysql:拼音首字母查询(超高性能)
  15. 程序员开发的“逆天”软件
  16. android+显示ui布局,[Android ]UI布局 (线性布局+相对布局)
  17. 甘肃暴雨强度公式_甘肃暴雨强度公式
  18. ps4如何无线连接网络连接服务器,PC党最佳选择!达人发布PS4手柄无线连接PC教程...
  19. java、web前端开发日常记录
  20. 循环不变式、数学归纳法、归纳推理和演绎推理学习总结

热门文章

  1. 获得与回馈丨点评中国两大金融机构基于OpenStack的网络联合实践
  2. 基于视频/摄像头的简单行为动作识别模型的训练步骤
  3. 英语体系----词根词缀等----持续补充(词根词缀等,词汇,语法,简单句,长难句,写作)
  4. AST使用eval运行函数,更换数值
  5. 对国产操作操系统的一点看法
  6. Since Due to Because of Because 的用法和区别
  7. 360浏览器打不开html5文件,电脑360浏览器打不开网页原因-浏览器打不开解决方法 - 系统家园...
  8. openstack搭建(私有云、公有云)云计算遇到的相关问题汇总整理
  9. 2009年 上海证券交易所新一代交易系统有多牛逼
  10. 电影推介2017-01-07