gpt4 book ai didi

random - gfortran 和随机数

转载 作者:行者123 更新时间:2023-12-02 05:48:55 26 4
gpt4 key购买 nike

我正在尝试使用 mac-ports (OS-X) 中的 Gfortran 4.7 编译以下简单代码:

program main

implicit none

integer :: n = 1, clock, i

integer, dimension(1) :: iseed

! initialize the random number generator
call random_seed(size = n)

call system_clock(COUNT=clock)

iseed = clock + 37 * (/ (i - 1, i = 1, n) /)
! iseed = clock
! iseed = abs( mod((clock*181)*((1-83)*359), 104729) )
call random_seed(PUT = iseed)

end program main

并出现此错误:

gfortran-mp-4.7  tmp.f90
tmp.f90:17.23:

call random_seed(PUT = iseed)
1
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/12)

我根本不使用 Fortran(我是 C++ 人员),因此如果有人可以提供帮助并使其正常工作,我将非常感激。

附:在类似的问题上,我发现了几个论坛帖子,当前的取消注释解决方案类似于this GCC bug report中提到的解决方案。 。

提到了带有 absin this stack overflow post (添加它时没有 PID,因为我无论如何都不并行运行。

更新:

以下作品:

program main

implicit none

integer :: n = 12, clock, i

integer, dimension(:), allocatable :: iseed

! initialize the random number generator
allocate(iseed(n))
call random_seed(size = n)

call system_clock(COUNT=clock)

iseed = clock + 37 * [(i, i = 0,n-1)]
call random_seed(PUT = iseed)

end program main

最佳答案

为了稍微放大@Yossarian 的评论,这个

call random_seed(size = n)

n 为单位返回 1 阶整数数组的大小,如果要初始化 RNG,则必须使用该数组。我建议通过将其声明更改为:

来使 iseed 可分配:
integer, dimension(:), allocatable :: iseed

然后,在获取 n 的值后,对其进行分配:

allocate(iseed(n))

用您最喜欢的值填充它,然后放入它。

您可以在一个语句中分配和填充它,如下所示:

allocate(iseed(n), source = clock + 37 * [(i, i = 0,n-1)])

我写可能因为这取决于您的编译器的最新程度。

编辑,OP评论后

不,你还没有完全理解我的建议。

通过执行获取n的值

call random_seed(size = n)

不要将 n 初始化为 12。

然后分配数组并填充它,可以在一个语句中(使用源分配),也可以在allocate 语句中后跟一个赋值。

allocate(iseed(n))
call random_seed(size = n)

操作顺序不正确。这将 iseed 设置为具有 12 个元素(这是执行第一个语句时 n 的值),然后将 n 设置为大小RNG 所需的数组。只要是 12,您就不会看到任何问题,但是一旦您将代码移植到另一个编译器,甚至可能是同一编译器的另一个版本,您就有可能遇到需要不同大小的整数数组的 RNG。 。不需要将值硬连接到代码中,所以不要这样做。

关于random - gfortran 和随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255631/

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