Fortran根据系统时间生成随机数

FORTRAN中用于产生随机数的子程序有random_seed和random_number,其中random_seed产生seed,random_number根据seed的值产生随机数。当random_seed()的参数为空时,其会给出一个默认的seed值,这意味着每次调用时产生的随机数都是相同的。(这也是有用的,这意味着你每次在执行程序的时候,会获得相同随机数序列,这些便于调试,但是有时候可能会需要每次生成不同的随机数序列以满足程序的要求)。

下面的方法利用系统时间产生随机数:

1      subroutine init_random_seed() 2      integer :: i,n,clock 3      integer,dimension(:),allocatable :: seed 4      call random_seed(size=n) 5      allocate(seed(n)) 6      call system_clock(count=clock) 7      seed=clock+37*(/(i-1,i=1,n)/) 8      call random_seed(PUT=seed)  9      deallocate(seed) 10      end subroutine

该子程序来源于GNU Fortran:http://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html

(以上内容转载自:http://blog.sina.com.cn/s/blog_872ecf9f01010kwl.html

调用通过如下程序可进行调用:

1      program randomnum 2      implicit real*8(a-h,o-z) 3      call init_random_seed() 4      call random_number(x) 5      write(*,*)x 6      end

注意:在一个程序中只需调用一次子程序 init_random_seed(),特别是在有另一个子程序也需要产生随机数的情况下,仍无需(说是不能或许更为恰当些)再次调用init_random_seed()。否则,若两次调用时间相差很小,可能出现生成的随机数的seed一样的情况,此时就会出现某个随机数连续出现若干次的情况。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript随机数

一、Math.random()Math.random()返回0到1之间的随机数(包括0,不包括1)。语法:Math.random();//returnsarandomnumber代码:项目JavaScriptMath.random()单击按钮以显示0(含)和1(不含)之间的随

Mock 语法讲解

是生成随机数据,拦截Ajax请求的JavaScript库。本文来介绍下Mock的常用语法。模拟数据生成随机数据Mock.Random.boolean()生成一个随机的布尔值。例如:返回值为true或false。Mock.Random.integer(min