Random 为什么Fortran随机种子输入是一个数组?
我使用下面的代码初始化我的种子(我不知道我在哪里找到它,但每个人,绝对每个人似乎都有这个!为什么?为什么37?) 现在为什么参数PUT是一个数组(大小为.ge.n)?我只能找到消息来源,说这是应该的,而不是为什么Random 为什么Fortran随机种子输入是一个数组?,random,fortran,random-seed,Random,Fortran,Random Seed,我使用下面的代码初始化我的种子(我不知道我在哪里找到它,但每个人,绝对每个人似乎都有这个!为什么?为什么37?) 现在为什么参数PUT是一个数组(大小为.ge.n)?我只能找到消息来源,说这是应该的,而不是为什么 第12页,共页 我很怀疑“绝对每个人”都有你37岁的表情 为什么是37岁?人们可以假设这是因为一些伪随机生成器可能会从平凡的初始种子(如[0,0,0…]+当前_时间)中给出质量可疑的序列,因此他们选择一些足够大(但不会太大以避免溢出)的素数,并使用该素数的倍数来获得一些更非平凡的种
为什么标准是这样设计的?(可能)因为数组中的熵比单个数字中的熵多。您可以有更多的组合。这是一个数组,因为Fortran标准说它是一个数组(大小可能为1)。除此之外,你是否在问为什么一个PRNG可以从一个以上数字描述的状态中获益?是的。特别是描述的PRNG。例如,“英特尔Fortran随机_”种子大小为2。我知道一些实现具有更大的种子阵列。
SUBROUTINE init_random_seed()
IMPLICIT NONE
INTEGER :: i, n, clock
INTEGER, DIMENSION(:), ALLOCATABLE :: seed
CALL RANDOM_SEED(size = n)
ALLOCATE(seed(n))
CALL SYSTEM_CLOCK(COUNT=clock)
seed = clock + 37 * (/ (i - 1, i = 1, n) /)
CALL RANDOM_SEED(PUT = seed)
DEALLOCATE(seed)
END SUBROUTINE