Fortran Coder

查看: 15406|回复: 7
打印 上一主题 下一主题

[求助] 如何生成(-1,1)范围内的随机数?

[复制链接]

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

跳转到指定楼层
楼主
发表于 2015-3-12 23:23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 likm1110 于 2015-3-12 23:26 编辑

如何生成(-1,1)范围内的随机数?
1.
ran = Mod(9876*n+156956,1324556)可以生成一个[0,1324555)的数
n = ran/1324556则生成[0,1)的数
利用这个可以做出一个生成[0,1)数的子程序,当ran里的参数未知,可视为生成随机数。
如何利用它生成[-1,1)的随机数?

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2015-3-13 07:43:06 | 只看该作者
[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  real :: x
  integer :: i
  call RANDOM_SEED()
  Do i = 1 , 10 !// 10个
    call RANDOM_NUMBER( x )
    x = x * 2.0 - 1.0
    write(*,*) x
  End Do
End Program www_fcode_cn

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

板凳
 楼主| 发表于 2015-3-13 08:08:19 | 只看该作者
楚香饭 发表于 2015-3-13 07:43
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  real :: x

阿!好简单,我想多了= =谢谢!

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

地板
 楼主| 发表于 2015-3-13 09:11:22 | 只看该作者
本帖最后由 likm1110 于 2015-3-13 09:14 编辑

[Fortran] 纯文本查看 复制代码
Module ran001
   Implicit None
   Save 
   Integer :: n = 9876
End Module ran001
!-------------------------------------------------------------
Subroutine random0(ran)
   Use ran001
   Implicit None
   Real, Intent(out) :: ran
   n = Mod(8121 * n + 28411, 134456)    ! A number between 0 and 134455
   ran = real(n) / 134456.      ! Generate a number [0,1.)
End Subroutine random0
!-------------------------------------------------------------
Subroutine seed(iseed)
   Use ran001
   Implicit None 
   Integer, Intent(in) :: iseed
   n = abs(iseed)
End Subroutine seed

这是一个产生为随机数的程序。我就想问问,在Module里为什么要定义n的初值?

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

5#
发表于 2015-3-13 12:21:46 | 只看该作者
你的代码是纯数学产生的,需要种子。n 相当于种子。

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

6#
 楼主| 发表于 2015-3-13 15:05:23 | 只看该作者
楚香饭 发表于 2015-3-13 12:21
你的代码是纯数学产生的,需要种子。n 相当于种子。

这个程序的主程序是要求输入种子的
[Fortran] 纯文本查看 复制代码
Write(*,*) 'Enter seed: '
   Read(*,*) iseed
   Call seed(iseed)

这样n的值不是在program里面产生了么?在Module里赋值还有必要吗?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
7#
发表于 2015-3-13 17:50:55 | 只看该作者
你试试去掉 n 的赋值看看有没有区别啊

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

8#
 楼主| 发表于 2015-3-13 18:11:47 | 只看该作者
vvt 发表于 2015-3-13 17:50
你试试去掉 n 的赋值看看有没有区别啊

没有区别,我试过了,只是不知道有没有n的初值和程序的安全性有没有关系~
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 07:49

Powered by Tencent X3.4

© 2013-2024 Tencent

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