14字符随机数发生器

最近的一个项目让我想起一个非常简单的方式产生伪随机数创建雨滴的行为。我发现,假如我们有一个随机初始化的无符号32位种子N可以循环通过伪随机数(C)只使用14个字符的乘法表:n*=0x9e3779b1;

每次应用此操作时,n将包含一个新的伪随机数。很神秘的样子,C这个操作实际上是一个粗糙的散列函数的整数乘法的方法称为Knuth,在无符号整数溢出进行moduolo操作。而且,对于任何好的散列函数,反复使用哈希本身的结果本质上产生一个伪随机值流。当然,这不是一个好的散列函数,所以重复使用这个散列本身会迅速恶化的随机性的质量,所以显然你不应该在生产代码中使用-但它适用于任何非关键,如代码诗!

神奇的数字0x9e3779b1只是一个大素数指定进制。从技术上讲,它可以取代任何其他大素数。最重要的是,它必须有几个因素,并有足够大的信息分配到更高的值位时,整数溢出。这个主要是最近的素数2 ^ 32 /Φ- Knuth最初的选择
在水里。我做了一些额外的坏事(TM)如使用一个64位有符号整数,使用未初始化的值作为随机种子的起始值,两者都是未定义的行为,但幸好GCC好心为我仍然有影响的我一直在寻找产生代码。古董鉴定

时间: 2024-11-08 11:55:45

14字符随机数发生器的相关文章

[nRF51822] 16、nRF51822的随机数生成器,及随机数生成器的一些知识(可以帮您补补随机数发生器的知识)

1.前言 随机数生成器在通信.加密.图像传输等领域应用广泛,且一般起到关键性作用.我在最近设计的一个近场射频通信协议的碰撞避退算法的过程中,便对此有深深体会. 2.伪随机数发生器 随机数发生器一般包括伪随机数发生器和真随机数发生器.伪随机数发生器的伪随机序列是由数学公式计算产生,如果生成随机数的算法确定了,那么这个随机数序列也就确定了.所以从数学意义上讲,伪随机数并不随机,序列本身也必然会重复.但是只要伪随机数发生器所产生的伪随机序列的周期足够成并且通过相应的检验,就可以在一定范围内使用.而且伪

随机数发生器(对拍)-----对比测试

对于写好的程序,可能会花费较长的时间进行调试,所以要具备一定的调试和测试能力.测试的任务就是检查一份代码是否正确.如果找到了错误,最好还能提供一个让它错误的数据.有了错误数据之后,接下来的任务便是调试:找出出错的原因.如果找到了错,最好把它改对——至少对于刚才的错误数据能得到正确的结果.改对一组数据之后,可能还有其他错误,因此需要进一步测试:即使以前曾经正确的数据,也可能因为多次改动之后反而变错了,需要再次调试.总之,在编码结束后,为确保程序的正确性,测试和调试往往要交替进行. 确保代码正确的方

浅谈随机数发生器(C语言)

本文出自:点击打开链接 本来在做数据结构课程设计..想用随机数生成测试数据,然后看到随机数就不由自主的想到精度问题,想到精度问题又想到随机数生成的时间问题,想到时间问题又想到调用系统随机数生成问题..呵呵呵呵呵. C语言调用Linux系统随机数:linux C程序中获取shell脚本输出 C语言往里写就好说了(Linux) const char *run ="echo '"+str+"' > test"; system(run); 另外在Google比较难以访

一个随机数发生器(一)

老黄.老银和老阳共事宇宙中心某互联网企业H,并且同在一个由校招新生组成的Team里.刚走出校园的他们,对自己去年在校招这场演技大比拼中的表现意犹未尽,因此常会拿一些没什么实际意义的技术问题大谈特谈. 这次是午饭后的扯皮时间,这几个人就吸着免费的明胶酸奶,从一些概率问题讨论到了随机数发生器上…… 黄:像去年(校招),面试官就很喜欢问这种题目:给定一个[0, M)的均匀分布随机整数发生器(以下简称RNG),设计一个[0, N)的整数的均匀分布RNG. 阳:我被问的时候不知道怎么做,问我的人就得意的告

如何模拟高斯分布的随机数发生器?

在一些算法中,经常会用到随机数,最常用的随机数有两种,一是服从均匀分布的随机数,二是服从高斯分布(正态分布)的随机数.在标准C中并没有产生高斯分布的随机数发生器,只有服从均匀分布的随机数发生器rand(),那么如何通过rand()来模拟出高斯分布特征的伪随机数呢?这就是本文的话题. 实验原理:高斯分布的随机数在概率上服从高斯分布,如果通过rand()产生某个区间的随机数,通过高斯分布的概率计算公式得到该随机数对应的概率值,然后与一个随机概率进行比较,如果该概率值大于随机概率,就认为该随机数是服从

随机数发生器

浅谈随机数发生器 目录(?)[-] 一真随机数发生器 基于电路的TRNG 基于其他物理源的TRNG 其他物理信息TRNG 二伪随机数发生器 取中法 i平方取中法 ii常数取中法 iii乘法取中法 同余法 移位法 梅森旋转算法 今 天在微博上到一篇如何使用随机数的文章,让我回忆起刚上大一时学C语言时,书后有道调用rand()函数的练习题,当时觉得好神奇,想知道它是怎么实现 的,大二时候学Java又遇到了random()函数,恰巧当时上机课我有机会问老师,遗憾的是老师只是告诉我那是伪随机数,课后查查

动手动脑:随机数发生器和函数重载

最近上课老师说出了一些随机数生成的方法,我通过上网查阅资料了解到其中有几种方法,一种是math.random方法这种方法被称为伪随机,也就是有规律的随机,有可能会出现重.第二种是用种子来进行随机数的产生.其中到用到了random类.这种方法通过不断更新种子的值来进行输出不同的随机数,这种生成方法再一次运行中对于不同的种子有不同的随机数值,也就是说对于相同的种子数值,他会有一样的数值来进行输出.种子数值相近的话生成的随机数也会很相近,这种原理,在以后的学习中我会进行进一步的学习. 下面是随机数发生

QuantLib 金融计算——数学工具之随机数发生器

目录 QuantLib 金融计算--数学工具之随机数发生器 概述 伪随机数 正态分布(伪)随机数 拟随机数 HaltonRsg SobolRsg 两类随机数的收敛性比较 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之随机数发生器 载入模块 import QuantLib as ql import scipy print(ql.__version__) 1.12 概述 随机模拟通常从产生均匀分布的随机数开始.假设 \(X \sim U [0, 1

驱动14.字符设备的另一种写法

原本的字符设备只能有255个驱动程序,原因是一个主设备号占用了0~255的次设备号 把register_chrdev展开可得到一下几个部分:register_chrdev_region/alloc_chrdev_region,cdev_init,cdev_add 参照register_chrdev的写法完成hello.c的代码 1 #include <linux/module.h> 2 #include <linux/kernel.h> 3 #include <linux/f