我的 Fortran 95 随机数生成器有什么问题吗?

2023-12-04

这是一个随机数生成器模块,我用它与我的主程序一起编译(此处未列出) 当我尝试编译随机数生成器模块以查看其是否有效时,我收到以下消息:

第 61 行:调用 random_seed( put = Seed) 错误:“random_seed”内在函数的“put”参数大小太小

这是什么意思?我该如何修复它?

module random_angle
 contains
 0
    integer Function random_integer (N)         ! return a random integer between 1 and N
        integer, intent(in) :: N
        real*8 :: x

        call random_number(x)
        random_integer = floor(real(N)*x)+1

    end function random_integer

    Real*8 Function gasdev()           !  ch7.pg.280:gaussian distribution function using ran1 as random # generator

        implicit none
!       integer, intent(inout) :: idum
        integer, save::iset
        real*8:: fac,rsq,v1,v2
        real*8, dimension(2) :: x
        real*8, save :: gset

!       if (idum.lt.0) iset=0
        if (iset.eq.0) then
          rsq = 0.0
          do while (rsq > 1.0.or.rsq==0)  
            call random_number(x)
            v1=2.*x(1)-1
            v2=2.*x(2)-1
            rsq=v1**2+v2**2
!    print *, v1, v2,rsq
          end do    

          fac=sqrt(-2.*log(rsq)/rsq)
          gset=v1*fac
          gasdev=v2*fac
          iset=1
        else
            gasdev=gset
            iset=0
        endif

        return

    end Function gasdev

    real*8 function NormalRandom (average, stddev)
        implicit none
        real*8, intent(in):: average, stddev
        NormalRandom = average + stddev*gasdev()

    end function NormalRandom

    subroutine setSEED (seed)
        implicit none

        real*8:: x
        integer, dimension(4), intent(inout):: seed
        if (seed(1) == 0.0) &
            seed = floor(1000*secnds(0.0)) +(/0, 37, 74, 111 /)  
        call random_seed( put=seed)

    end subroutine setSEED

end module random_angle

当编译器说

错误:“random_seed”内在函数的“put”参数大小太小

这意味着你的变量的大小seed太小。

在这种情况下你有seed大小为 4(我猜编译器肯定期望(至少)为 12)。

数组的大小必须具有一定的大小,这取决于编译器。您可以通过调用来确定所需的大小random_seed与另一个论点

integer seed_size
integer, allocatable :: seed(:)

call random_seed(size=seed_size)
allocate(seed(seed_size))
seed = ...
call random_seed(put=seed)

正如 Vladimir F 在评论中指出的那样,gfortran 文档本身有一个例子这种方法。

如果您不关心可移植性,则可以仅使用大小为 12 的数组以及您选择的值。


作为更高级的阅读,我会说另一件事。我上面给出的示例确实与您的代码不太可比。也就是说,您说种子设置子例程的输入保证大小至少为 4,并且它可能包含也可能不包含您想要用作种子的值。

正如我上面提到的,您可以将其更改为 12,但这不可移植。如果你想便携,事情就会变得更加尴尬。

integer, dimension(4), intent(inout):: seed

有一个大小为 4 的显式形状数组作为虚拟参数。主程序中的实际参数是一个至少具有该大小的数组。然而,这个尺寸是一个规范表达而且,唉,call random_seed(size=seed_size)没有给我们一些可以在规范表达式中使用的东西。

也许像

subroutine setSEED (seed)
  integer, allocatable, intent(inout) :: seed(:)
  integer seed_size

  ! Determine the correct size for the seed
  call random_seed(size=seed_size)

  ! If our seed isn't set, or is too small, kill it.
  if (ALLOCATED(seed)) then
    if (SIZE(seed)<seed_size.or.seed(LBOUND(seed,1))==0.) deallocate(seed)
  end if

  ! If seed isn't allocated (perhaps we killed it because it was too small)
  ! then allocate it to the correct size and initialize it.
  if (.not.ALLOCATED(seed)) then
    allocate(seed(seed_size))
    seed = ...  ! Our fallback seed initialization
  end if

  ! Finally, put the seed.  Using one we set, or the one originally given.
  call random_seed(put=seed)

end subroutine

当然,这要求实际论证是allocatable,但如果您正在处理便携式播种机,那是一件好事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 Fortran 95 随机数生成器有什么问题吗? 的相关文章

  • 如何在Fortran代码中将二维数组转换为一维数组?

    如何将 r i j 转换为一维数组以便可以轻松地对数字进行排序 program sort implicit none character CN 8 O 7 integer j iconf nconf integer i nbins t in
  • 在哪里可以获得几乎所有英语单词的列表? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想生成一些随机文本 我尝试写一个基本的Java程序 int nowords r nextInt 2000 int i j for i 0
  • 如何在C++中生成高精度的随机双数?

    我正在尝试生成一系列高精度的双随机数 例如 0 856365621 小数点后有 9 位数字 我从网上找到了一些方法 但是 它们确实生成了双随机数 但精度没有我要求的那么好 只有小数点后6位 那么 我可以知道如何实现我的目标吗 在 C 11
  • 如何获取numpy.random.choice的索引? - Python

    是否可以修改 numpy random choice 函数以使其返回所选元素的索引 基本上 我想创建一个列表并随机选择元素而不进行替换 import numpy as np gt gt gt a 1 4 1 3 3 2 1 4 gt gt
  • 这个方法比 Math.random() 更快吗?

    我是一名初学者 目前已经开始开发一款使用粒子群优化算法的 Android 游戏 我现在正在尝试稍微优化我的代码 并且 for 循环中有相当多的 Math random 几乎一直在运行 所以我正在考虑一种方法来绕过并跳过所有 Math ran
  • 识别操作系统

    我在 Intel 编译器上的 Fortran 90 代码取决于它运行的操作系统 例如 if OS win7 then do X else if OS linux then do y end if 我如何以编程方式执行此操作 您可以使用预处理
  • C++ 为伪随机数生成器生成良好的随机种子

    我正在尝试为伪随机数生成器生成一个好的随机种子 我想我应该得到专家的意见 让我知道这是否是一个不好的方法或者是否有更好的方法 include
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • 与随机数生成算法相关的种子是什么?为什么经常使用计算机时间来创建该种子?

    我读到了seeds用于初始化随机数生成器 但似乎种子的随机性对于从生成器获得良好的随机性并不重要 所以我想了解什么是seed实际上 为什么这么称呼呢 最后为什么time在计算机系统中是用来生成这样的种子的 伪随机数生成器生成数字序列 它不是
  • 以概率从列表中选择随机元素

    我有一个包含四个项目 A B C D 的列表 每个项目都有被选择的概率 例如 A 有 74 的机会被选中 B 15 C 7 D 4 我想创建一个函数 根据其概率随机选择一个项目 有什么帮助吗 为您的项目定义一个类 如下所示 class It
  • 为 javascript 编写一个真正具有包容性的随机方法

    Javascript MATH 对象有一个随机方法 该方法从集合 0 1 返回 0 含 0 1 不包括 有没有办法返回一个真正随机的方法 其中包括 1 e g var rand MATH random 2 if rand gt 1 rand
  • PHP 使用今天的日期生成一个随机数

    我正在尝试为内容块 在网页上 分配一个随机生成的数字 该数字基于今天的日期 无论是什么 和固定数字 由于某种原因 输出的数字种类存在巨大差异 例如 当我在本地测试我的代码时 生成的数字对我来说足够好 正数 但在实际的实时服务器上时 它们通常
  • Fortran 递归分段错误

    我必须设计并实现一个 Fortran 例程来确定方格上簇的大小 并且递归地编写子例程似乎非常方便 然而 每当我的晶格大小超过某个值 大约 200 边 时 子例程就会始终出现段错误 这是我的集群检测例程 RECURSIVE SUBROUTIN
  • 来自数据类型的 Haskell 随机数

    我对 Haskell 还很陌生 我有一个数据类型 data Sentence Prop Int No Sentence And Sentence Or Sentence deriving Eq 我已经为它写了一个 Show 实例 然而 无论
  • 如何随机化 NSArray? [复制]

    这个问题在这里已经有答案了 假设我有一个 NSArray 里面有 50 100 个对象 如何将数组按随机顺序排列 有很多方法可以做到这一点 但大多数只涉及生成随机数 也许您可以使用 NSMutableArray 使用此技术 生成 0 到 4
  • 为什么我在这段代码中不断得到两个相同的随机值? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我的随机数生成器在 C 中不是随机的 https stackoverflow com questions 932520 why does it appear that my random num
  • mySQL 返回可能有重复项的随机行

    我正在尝试随机化一定数量的行 但假设数据库中只有 4 行 而我需要获得 6 个随机行 我希望有可能 即使表中有超过 6 行 产生重复的行行 这在 mySQL 中很容易实现吗 我当前的查询是这样的 SELECT FROM winners OR
  • Apache JMeter:在请求正文中添加随机数据

    我正在 Apache JMeter 中对我们的应用程序进行压力测试 我想到调用注册用户方法 该方法将在数据库中添加用户 但如果电子邮件已存在 则不会发生数据库操作 如何在身体数据中添加随机数 或者有其他方法可以对与数据库连接的应用程序进行压
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • 在 Matlab 中将绘图从高斯混合变换为均匀分布

    考虑以下抽签2x1Matlab 中的向量 其概率分布是两个高斯分量的混合 P 10 3 number draws v 1 First component mu a 0 0 5 sigma a v 0 0 v Second component

随机推荐

  • 鸡蛋掉落拼图 - 需要建议

    问题陈述 掉蛋是指一类问题 其中重要的是找到正确的响应而不超过某些失败状态的 低 数量 在一个玩具示例中 有一座地板塔和一个装有理想鸡蛋的滴蛋器 理想鸡蛋的物理特性是 如果从地板或上方掉落 它会碎裂 如果从地板或下方掉落 则不会造成任何损坏
  • 浏览器后退按钮的注销问题

    我使用 ASP Net MVC 4 创建了登录 注销功能 我使用自己创建的表单根据 Active Directory 对用户进行身份验证 它的功能运行良好 安全方面仍然存在一个大问题 用户单击注销链接后 他 她成功注销并再次重定向到登录表单
  • 引用代替吸气剂?

    在 C 中使用引用代替 getter 是一种不好的做法吗 例如 class X int mP public const int P X P mP 然后 X xl int h xl P 只需考虑重构以使访问线程安全 这种方式不会很好地工作 并
  • 可以 lapply 连续传递(到函数)存储在向量中的值

    我需要 lapply 来连续传递 到函数 存储在向量中的值 values lt c 10 11 13 10 lapply foo function x peakabif x npeaks values 所以要得到 peakabif x1 n
  • 文本区域自动换行

    使用 jQuery 如何制作一个文本区域 在光标接近末尾时插入文本时自动添加新行 文本区域的宽度是通过 CSS 动态完成的 例如 myTextArea width 80 所以我不能做任何事情 比如计算每行中的字符 我不需要非 JS 解决方案
  • 使用 PHP 在电子邮件中发送多个附件

    我在发送包含多个附件的电子邮件时遇到问题 这是代码
  • 如何让我的 git(Windows 上的 msysgit)提交后脚本将我的 python 脚本作为 python 而不是 bash 调用?

    我用 python 编写了一个提交后脚本 c myfolder myscript py 我想从提交后脚本调用它 这没有找到它 bin sh c myfolder myscript py bash 认为命令 c myfoldermyscrip
  • 在同一个图中绘制两个图

    我想在同一个图中绘制 y1 和 y2 x lt seq 2 2 0 05 y1 lt pnorm x y2 lt pnorm x 1 1 plot x y1 type l col red plot x y2 type l col green
  • 如何在 swift 2.2 中捕获 NSUnknownKeyException?

    我有一个代码 我想设置键的值 如下所示 item setValue field 1 forKey field 0 我想捕获是否抛出 NSUnknownKeyException 但我有以下代码但它不起作用 do try item setVal
  • 当“显示临时标头”时,Chrome 不显示请求 cookie

    当我在服务器应用程序中设置断点并使用 Chrome 向暂停的端点发出请求时 当调试器位于其上时 cookie 不会显示在请求中 我花了一些时间调试为什么客户端不发送 cookie 直到我意识到发生了什么 cookie 存在但不显示 为什么会
  • 使用 strrev 在 C++ 中正确反转字符串

    我希望用户输入 strrev 的字符串来反转 但是当用户输入字符串时 由于某种原因不允许使用空格 所以如果有人输入 hello 我的名字是 stan 输出仅为 nats 我怎样才能让函数接受空格 include
  • 将 click() 事件附加到 Twitter 关注按钮?

    我想在用户单击 关注 按钮时在页面上添加提醒消息 我怎样才能做到这一点 这是代码 a href https twitter com prajapat2010 class twitter follow button Follow prajap
  • 通过 CSS 调整 BUTTON 的大小

    我使用 jquery mobile 生成按钮 下面有一个 CSS 代码来更改其设计 但无论我在宽度和高度中输入什么值 按钮的大小都不会改变 但它相对依赖于字体大小标签 如何更改此设置 以便无论标签的字体大小如何都可以更改按钮大小 ui 1
  • 在 Java 中使用 MongoDB 中的日期范围进行查询

    我是 MongoDB 的新手 我里面装满了收据 例如 一张收据看起来像这样 id oid 510fa057c6f818c2bfd0b279 StoreName Metro StoreNumber 521 Items ItemName Bat
  • 您不能将自定义标题与其他标题功能结合起来

    在我的应用程序中 我使用 ActionBarSherlock 库 我还使用自定义标题栏 这是我的 onCreate requestWindowFeature Window FEATURE CUSTOM TITLE setContentVie
  • 从父母到孩子该选择什么类型的演员?

    这个问题是关于哪个C 风格转换应该用来进行这种转换 我知道 C 风格的强制转换可以实现这一点 对于以下class结构 class Foo class Bar public Foo 说我被给予 Foo ptr 我想把它投射到Bar 我应该使用
  • 虚函数和模板冲突

    我有一个 pointAccumulator 的抽象基类 这个抽象基础将填充方法 例如返回所有点的平均值的函数 这两个类的示例如下所示 class lala public virtual someFunctions 0 virtual boo
  • ggplotly 因 geom_vline() 和 xintercept 日期值而失败

    尝试使用ggplotly用垂直线绘制时间序列数据以指示感兴趣的日期 呼叫失败并显示Ops Date z xy 86400000 中的错误 未为 Date 对象定义 我尝试使用最新的 CRAN 和 ggplot2 的开发版本 根据plotly
  • 在 React Native 应用程序中加载片段

    我正在开发我的 Android 库和 ReactNative 之间的桥梁 以便能够在混合应用程序上使用我的库 我首先创建了一个基本应用程序react native init其中有默认的 Android 和 iOS 文件夹 然后我导入了我的库
  • 我的 Fortran 95 随机数生成器有什么问题吗?

    这是一个随机数生成器模块 我用它与我的主程序一起编译 此处未列出 当我尝试编译随机数生成器模块以查看其是否有效时 我收到以下消息 第 61 行 调用 random seed put Seed 错误 random seed 内在函数的 put