首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管使用了随机种子,但随机数始终保持不变

尽管使用了随机种子,但随机数始终保持不变
EN

Stack Overflow用户
提问于 2014-01-25 23:05:54
回答 1查看 9.7K关注 0票数 10

我有以下一小段代码:

代码语言:javascript
复制
  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

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

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-26 01:20:21

很可能正在使用相同的种子:这是处理器相关的。这是因为您对random_seed的调用没有设置种子。

使用引用

代码语言:javascript
复制
CALL random_seed(i)

参数i不是(intent(in))种子,而是处理器使用的种子的(intent(out))大小。此调用类似于

代码语言:javascript
复制
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中给出。

为生成器设定种子的常见方法是:

代码语言:javascript
复制
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()的使用是非标准的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21352202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档