伪随机与Erlang中的实现
伪随机
伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并能通过随机数检验的伪随机数,以保证计算结果的随机性(百度百科)。
64位生成器
xoshiro256++/xoshiro256** (XOR/shift/rotate)是通用的,绝对可靠的生成器。它们拥有极好的速度,状态空间(256位)对于任何并行应用程序都足够大,并且它们通过了我们所知道的所有测试。
然而,如果只生成64位浮点数(通过提取上面的53位),xoshiro256+是一个稍微快一点(≈15%)的生成器,具有类似的统计特性。
在一般情况下,必须考虑到它的最低位具有较低的线性复杂度,并且不能通过线性测试;然而,较低的线性复杂度在实践中几乎没有任何影响,而且如果您使用较高的位元生成浮点数,则肯定没有任何影响(我们计算了最低位元的线性复杂度的精确估计值)。
如果空间有限,xoroshiro128++/xoroshiro128** (XOR/rotate/shift/rotate)与xoroshiro128+具有相同的速度,占用了一半的空间;同样的注释也适用。它们只适用于低规模的并行应用;此外,xoroshiro128+在汉明权重中表现出轻度依赖性,在我们的测试中,输出5 TB之后会产生故障。我们相信这种轻微的偏差不会影响任何应用。