在 JDK的java.util包里提供了一个用于生成随机数的Random类,它是如何生成随机数的?为什么它生成的随机数是均匀的?今天我们一起来聊聊其背后的原理。
本文基于Java语言,jdk 11。
Random是 java.util 包提供的一个用于生成随机数的类,首先,我们看看官方对它的描述:
通过源码,我们总结出几个核心点:
伪随机数指的是一种看起来像随机数的序列,但实际上是由确定性算法生成的。这种算法称为伪随机数生成器(PRNG,Pseudo-Random Number Generator)。
PRNG使用一个称为”种子”的初始值,然后通过一系列的数学运算来生成一个序列,这个序列看起来具有随机性的特征,比如均匀分布、无序性等。
在随机数生成器中,种子(seed)其实就是一个起始值,它用于初始化随机数生成器的状态。随机数生成器使用这个种子来确定生成随机数的序列。种子决定了随机数生成器的初始状态,因此给定相同的种子,将会生成相同的随机数序列。
线性同余算法(LCG,Linear Congruential Generator)是最基本的伪随机数生成算法之一,该算法通常使用如下方程表示:
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-88333-0.html如何用 Java 高效的生成随机数?Random 的原理是什么?
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 聊聊C#中的委托与事件