program main
implicit none
integer::i
real::r1,r2,r3,r4
call random_seed()
open(12,file='d:\\test\\r1.txt',status='replace')
do i=1,100
call random_number(r1) !R1,R2 U(0,1)
call random_number(r2)
r3=sqrt(-2*log(r1))*cos(r2) !muller and box 1958
r4=sqrt(-2*log(r1))*sin(r2) !AMPLITUDE AND PHASE
write(12,*) r3
end do
close(12)
!print *,r1,r2
!PRINT *,R3,R4 !R3,R4 N(0,1)
end
由两个均匀分布独立随机变量r1,r2产生两个独立高斯分布随机变量r3,r4
利用钾-40放射衰变是完全随机的这一原理,就可以做成真随机数生成器。
盖革计数器全称盖革-米勒计数器(Geiger-Müller counter),从1928年开始就是一个专门用来探测电离辐射强度的记数仪了。
它涉及的算法非常简单,写一个主循环,让寄存器从0加到n,等于n时,寄存器重置为0。
一旦在这个过程中检测到装置上方香蕉中的钾-40衰变放射出粒子,主循环就暂停,执行中断程序,将寄存器中的最后一个值作为随机数返回,然后寄存器再重置为0,继续循环。
比如,我们可以让寄存器从0加到15,并用十六进制表示这几个数(0-15也就为0-9、A-F),因此两位十六进制数就可以组成1个字节的随机数了,最终可以得到十进制范围内0-255的任意数。
一个十六进制比如6F转换成二进制数就等于0110 1111,一共有8位,而一个字节正好等于8位二进制数。这就是一个香蕉随机数生成器的诞生。以往要想获得真正的随机数,常见的做法就是将一些大自然的物理现象产生的随机量转化成数字信息。
比如电阻热噪声、半导体中的雪崩效应、电路混沌效应等。
还有人甚至会用到更为复杂的量子现象,比如散粒噪声、光电效应,以及宇宙微波背景辐射,也就是前面提到的放射性衰变。
现在,只需要一个香蕉、300多块的硬件就可以做成,简直不要太方便。
事实上,GitHub上其实已经有很多类似项目,推特上也有一个专门账号曾每天发200多个随机数坚持了一年。
PYTHON产生小数序列
def frange(start,stop, step=1.0):
while start < stop:
yield start
start +=step