如何生成(-1,1)范围内的随机数?
本帖最后由 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)的随机数?
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 楚香饭 发表于 2015-3-13 07:43
Program www_fcode_cn
Implicit None
real :: x
阿!好简单,我想多了= =谢谢! 本帖最后由 likm1110 于 2015-3-13 09:14 编辑
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的初值? 你的代码是纯数学产生的,需要种子。n 相当于种子。 楚香饭 发表于 2015-3-13 12:21
你的代码是纯数学产生的,需要种子。n 相当于种子。
这个程序的主程序是要求输入种子的
Write(*,*) 'Enter seed: '
Read(*,*) iseed
Call seed(iseed)
这样n的值不是在program里面产生了么?在Module里赋值还有必要吗? 你试试去掉 n 的赋值看看有没有区别啊 vvt 发表于 2015-3-13 17:50
你试试去掉 n 的赋值看看有没有区别啊
没有区别,我试过了,只是不知道有没有n的初值和程序的安全性有没有关系~
页:
[1]