Fortran Coder

查看: 284|回复: 10
打印 上一主题 下一主题

[通用算法] random seed

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2024-3-27 13:35:06 | 显示全部楼层
本站随机数教程
http://fcode.cn/guide-96-1.html
回复

使用道具 举报

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2024-3-28 22:05:18 | 显示全部楼层
第一个问题:
call random_seed( size = n ) !// 获得种子大小
此处,random_seed 函数会给 n 赋值。在你的编译器上,是 2。(其他编译器不一定)
这个n一般对特定的编译器是固定值。

第二个问题:
种子的个数 n 可以不止一个,当然也可以是一个。对特定的编译器通常是固定的值。获取种子的个数是为了方便你分配数组。

第三个问题:
请把 n 大小的数组,视为一个整体。

[Fortran] 纯文本查看 复制代码
    call random_seed( size = n ) !// 请问你需要几个数做为种子?好的,你需要 n 个种子是吧?
    allocate( sed(n) ) !// 让我来分配 n 个种子 sed
    sed = ...... !// 让我来生成 n 个种子 sed
    call random_seed( put=sed ) !// 好了,这是你需要的 n 个种子 sed,我现在交给你
回复

使用道具 举报

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2024-4-4 17:49:00 | 显示全部楼层
你是不是每次都设置了种子?
设置种子的函数,只需要在程序一开始调用一次。之后不要再次调用。
计算机获得种子之后,每次生成随机数都会为下一次随机做好准备,不再需要再次指定种子。(否则容易导致下一次的状态被重置)
回复

使用道具 举报

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2024-4-8 20:56:31 | 显示全部楼层
和随机数无关。
fortran的执行语句必须在所有定义语句的后面。
call RANDOM_SEED() 是执行语句,integer::amp 是定义语句。
改成
Implicit None
    integer::amp
    real::ampvalue

    call RANDOM_SEED()
    do amp=1,1500
        Call RANDOM_NUMBER(ampvalue)
        print *,ampvalue
    end do

就行了。
回复

使用道具 举报

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2024-4-10 19:23:29 | 显示全部楼层
Andy1201 发表于 2024-4-10 16:47
明白了,谢谢大神吖,我还有两个小问题想向您请教

第一个问题是:call random number生成的随机数是0-1 ...

第一个问题:
[0,1) 半开半闭区间
第二个问题:
原理是正态分布函数的概率密度。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-13 11:08

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表