Random 集中在一定范围内的随机数
我编写了Fortran代码来生成一系列随机数。在这段代码中,我可以设置随机数窗口(最小和最大随机数)以及该窗口中随机数的百分比(随机数)。我希望生成的随机数总是彼此不同 我可以使用gfortran编译器成功地编译它;然而,我发现了一个问题。例如,当我分别输入1和81作为最小值和最大值,0.07作为百分比时,代码总是给我七个不同的随机数,它们总是小于10,无论我运行了多少次。我所期望的是,代码应该给我七个不同的随机数,它们分布在1~81范围内,而不是只集中在1~10范围内。我不知道为什么代码给我的随机数只集中在一定范围内。我把代码贴在下面 你能就我的问题给我一些建议吗?事先非常感谢Random 集中在一定范围内的随机数,random,fortran,gfortran,Random,Fortran,Gfortran,我编写了Fortran代码来生成一系列随机数。在这段代码中,我可以设置随机数窗口(最小和最大随机数)以及该窗口中随机数的百分比(随机数)。我希望生成的随机数总是彼此不同 我可以使用gfortran编译器成功地编译它;然而,我发现了一个问题。例如,当我分别输入1和81作为最小值和最大值,0.07作为百分比时,代码总是给我七个不同的随机数,它们总是小于10,无论我运行了多少次。我所期望的是,代码应该给我七个不同的随机数,它们分布在1~81范围内,而不是只集中在1~10范围内。我不知道为什么代码给我的
PROGRAM RANDOM_POSITION
IMPLICIT NONE
REAL percent, val
INTEGER maxi, mini, num, i, l
INTEGER, DIMENSION(1), ALLOCATABLE :: position(:)
PRINT *,'Range for the impurity position(maximum and minimum value):'
PRINT *,'Minimum value:'
READ (UNIT=*, FMT=*) mini
PRINT *,'Maximum value:'
READ (UNIT=*, FMT=*) maxi
PRINT 11,'Percentage of impurity='
11 FORMAT(A23,$)
READ (UNIT=*, FMT=*) percent
num = (maxi-mini) * percent
IF ((maxi-mini) * percent-num .NE. 0.0) THEN
num = num + 1
END IF
PRINT *, num
ALLOCATE (position(num))
CALL RANDOM_SEED()
DO i=1, num ,1
CALL RANDOM_NUMBER(val)
position(i) = NINT(mini + val * num)
CALL JUDGEMENT(position, i, l)
l = 0
DO WHILE (l .EQ. 0)
CALL RANDOM_NUMBER(val)
position(i) = NINT(mini + val * num)
CALL JUDGEMENT(position, i, l)
END DO
PRINT *, position(i)
END DO
DEALLOCATE(position)
STOP
END PROGRAM RANDOM_POSITION
SUBROUTINE JUDGEMENT(arr, j, l)
IMPLICIT NONE
INTEGER j, k, l
INTEGER, DIMENSION(1) :: arr(j)
l = 1
DO k=1, j-1, 1
IF (arr(k) .EQ. arr(j)) THEN
l = 0
EXIT
ELSE
l = 1
END IF
END DO
RETURN
END SUBROUTINE JUDGEMENT
我没有对你的问题考虑太多,但是你有
l=0
,后面是一个带有l.eq.0
条件的循环。在该循环中,l
的值似乎永远不会改变。19正是num=(maxi mini)*percent
的结果。你希望得到什么?亲爱的,非常感谢你的回答。我终于找到了毛病。我改变了子程序中的参数l值,但在调用子程序时,我并没有在主代码和子程序之间传递它。然后l值总是相同的,循环只是继续,从不跳出。我已经把它整理好了。非常感谢您的帮助。您的代码仍然有错误。例如,当滚动的数字已经在数组中时,您不会再次滚动,只需再次检查。这可能导致无限循环。另外,如果你想要介于mini
和maxi
之间的数字,你应该使用x=mini+val*(maxi-mini+1)
亲爱的大家,我修改了我的FORTRAN代码并将其粘贴到我的问题中;然而,当我运行它时,我发现了另一个问题。我更新我的问题。请你看一看,并给我一些如何整理的建议好吗?事先非常感谢。