我是fortran proramming中的新人。 任何人都可以請幫我解決方案。 我有使用 RANDOM_SEED和蘭特在FORTRAN隨機數範圍[0,5]產生整數隨機數 的問題如何在fortran 90中生成[0,5]範圍內的整數隨機數?
回答
什麼:
program rand_test
use,intrinsic :: ISO_Fortran_env
real(REAL32) :: r(5)
integer :: i(5)
! call init_random_seed() would go here
call random_number(r)
! Uniform distribution requires floor: Thanks to @francescalus
i = floor(r*6._REAL32)
print *, i
end program
然後使用'real :: ...'和'6.'。但是,請你幫個忙,然後切換到明確的定義! –
'i = floor(r * 3。) - 1' –
沒關係,但它會給出均勻的分佈.....?\ – user3531410
爲了通過亞歷山大沃格特支持answer ,我會概括。
固有的random_number(u)
從區間[0,1)中的均勻分佈返回實數u
(或這樣的數組)。 [也就是說,它包括0但不是1]。
爲了在整數{n,n + 1,...,m-1,m}上有一個離散的均勻分佈,將連續分佈劃分爲m + 1-n個相等大小的塊,將每個塊映射到一個整數。的一種方法是:
call random_number(u)
j = n + FLOOR((m+1-n)*u) ! We want to choose one from m-n+1 integers
正如你可以看到,對於{0,1,2,3,4,5}這降低到
call random_number(u)
j = FLOOR(6*u) ! n=0 and m=5
和用於其它情況下,最初的問題您的評論{-1,0,1}
call random_number(u)
j = -1 + FLOOR(3*u) ! n=-1 and m=1
當然,其他轉換將需要設置不連續的整數,和一個要注意的問題數值。
,以避免由於'真正'尾數有限的位數歪曲(53爲IEEE 754雙精度,24爲單-precision),你可能需要多次調用'random_number',例如,看看['_randbelow(n)'是如何通過Python中的random()實現的](https://github.com/python/cpython/blob /1dae7450c68bad498e57800387b24cb103c461fa/Lib/random.py#L243-L248) – jfs
- 1. 如何在生成文件的範圍內生成隨機數?
- 2. 生成範圍內的隨機數
- 3. 在隨機字節的給定範圍內生成隨機數
- 4. 每天在一個範圍內生成一個隨機整數
- 5. 需要在指定範圍內生成一個隨機整數
- 6. 用概率分佈生成範圍內的隨機整數
- 7. 生成範圍內不爲零的隨機整數
- 8. 在MATLAB中生成負數和負數範圍內的隨機整數
- 9. 如何在Rust的範圍內生成一個隨機數?
- 10. 生成一個範圍內的隨機整數(無限循環)
- 11. 如何生成的隨機整數範圍
- 12. 在不同範圍內在Cuda內核中生成隨機數
- 13. 如何在C範圍內生成一個隨機數?
- 14. 如何在範圍內生成隨機數?
- 15. 如何在用戶範圍內生成隨機數字?
- 16. 範圍內生成隨機整數朱莉婭
- 17. .NET的 - 如何生成一定範圍內的隨機數字?
- 18. 範圍內的隨機大整數JavaScript
- 19. 如何生成給定範圍內的隨機數?VB.NET
- 20. 如何使用std :: generate_canonical生成範圍[0,1)內的隨機數?
- 21. 如何隨機生成-0.5和0.5範圍內的數字?
- 22. 生成一個隨機數的範圍
- 23. 無法爲整數生成全範圍的隨機數
- 24. 在iOS中生成範圍內的隨機數?
- 25. 在程序集中生成一個範圍內的隨機數
- 26. 範圍內的隨機生成器
- 27. 隨機數字生成器Javascript - 範圍
- 28. 多範圍隨機數生成器
- 29. 生成一個小範圍的隨機不重複的整數
- 30. 如何在每個數字位於數字範圍內生成隨機數字?
'rand'是一個GNU擴展。 Fortran 95組合是'random_seed'和'random_number'。 –
5是您接受的結果嗎?還是你的意思是要求範圍[0,5)?下面的建議不會給你完全的終點值(除非可能四捨五入。) –
@SteveLionel我不太清楚你的意思...你可以擴展它嗎? –