gpt4 book ai didi

尽管使用了随机种子,但随机数仍然保持不变

转载 作者:行者123 更新时间:2023-12-04 04:25:42 24 4
gpt4 key购买 nike

我有以下一小段代码:

  REAL(8)       :: x
INTEGER :: i

call system_clock(i)
WRITE(*,*) 'cpu time', i
CALL random_seed(i)

CALL random_number(x)
WRITE(*,*) 'uniform RandVar', x

CPU 时间工作正常,但每次我运行它时我都会得到相同的统一 RandVar number = 0.99755959009261719 ,几乎就像 random_number一遍又一遍地使用相同的默认种子并忽略随机种子。

我究竟做错了什么?

最佳答案

很可能正在使用相同的种子:这取决于处理器。原因是您调用 random_seed没有设置种子。

随着引用

CALL random_seed(i)

参数 i不是 ( intent(in) ) 种子,而是处理器使用的种子的 ( intent(out) ) 大小。这个电话就像
CALL random_seed(SIZE=i)  ! SIZE is the first dummy argument

要设置种子,您需要明确地与 PUT 关联。虚拟参数: call random_seed(put=seed) .这里的种子是大小至少为 n 的 1 级数组哪里 n - 再次依赖于处理器 - 是由 call random_seed(size=n) 给出的大小.来自您的来电 i持有这个值。

完整的细节在 F2008 的 13.7.136 中给出。

为生成器设置种子的常用方法是:
integer, allocatable :: seed(:)
integer size

call random_seed(size=size)
allocate(seed(size))
! set seed(:) somehow
call random_seed(put=seed)

设置 seed适本地不是一个简单的过程。我没有在这里说明如何做到这一点,但可以在对 this other question 的回答中找到详细信息。 .

使用 srand() ,在评论中提到,是非标准的。

关于尽管使用了随机种子,但随机数仍然保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com