Tôi là loại mới trong việc đặt cược trước. Bất cứ ai có thể vui lòng giúp tôi với giải pháp. tôi đang gặp một vấn đề về tạo số nguyên ngẫu nhiên số trong khoảng [0,5] trong số ngẫu nhiên fortran sử dụng random_seed và randcách tạo số ngẫu nhiên nguyên trong fortran 90 trong phạm vi [0,5]?
Trả lời
gì về:
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
Sử dụng 'real :: ...' và '6.' sau đó. Nhưng xin vui lòng, làm cho mình một ưu và chuyển sang định nghĩa rõ ràng! –
'i = tầng (r * 3.) - 1' –
là ok nhưng sẽ phân phối đồng đều .....? \ – user3531410
Để hỗ trợ các answer bởi Alexander Vogt , Tôi sẽ khái quát.
Các nội random_number(u)
trả về một số thực u
(hoặc một mảng như vậy) từ sự phân bố đồng đều trong khoảng [0,1). [Tức là, nó bao gồm 0 nhưng không phải 1.]
Để phân bố đồng đều riêng biệt trên các số nguyên {n, n + 1, ..., m-1, m} khắc phân phối liên tục thành m + 1-n khối có kích thước bằng nhau, ánh xạ từng đoạn vào một số nguyên. Một cách có thể là:
call random_number(u)
j = n + FLOOR((m+1-n)*u) ! We want to choose one from m-n+1 integers
Như bạn có thể thấy, cho câu hỏi ban đầu cho {0, 1, 2, 3, 4, 5} điều này làm giảm tới
call random_number(u)
j = FLOOR(6*u) ! n=0 and m=5
và đối với trường hợp khác trong bình luận của bạn {-1, 0, 1}
call random_number(u)
j = -1 + FLOOR(3*u) ! n=-1 and m=1
Tất nhiên, biến đổi khác sẽ được yêu cầu cho bộ số nguyên không tiếp giáp, và ta nên chú ý đến vấn đề số.
để tránh skew do số lượng hạn chế của bit trong 'thực tế '(53 cho IEEE 754 đôi chính xác, 24 cho duy nhất -precision), bạn có thể cần phải gọi 'random_number' nhiều lần ví dụ, xem [cách' _randbelow (n) 'được thực hiện thông qua' random() 'trong Python] (https://github.com/python/cpython/blob) /1dae7450c68bad498e57800387b24cb103c461fa/Lib/random.py#L243-L248) – jfs
- 1. Nhận số nguyên ngẫu nhiên trong phạm vi (x, y]
- 2. Số ngẫu nhiên trong một phạm vi
- 3. Tạo một số ngẫu nhiên trong phạm vi?
- 4. Tạo một số nguyên ngẫu nhiên trong một phạm vi trong Haskell
- 5. Pandas: tạo cột mới trong df với số nguyên ngẫu nhiên từ phạm vi
- 6. Số ngẫu nhiên giữa hai phạm vi
- 7. Cách tạo số nguyên ngẫu nhiên ngẫu nhiên "đủ"?
- 8. Fortran 90 Tài nguyên?
- 9. Cách tạo số ngẫu nhiên trong Elixir?
- 10. Tạo một đôi ngẫu nhiên trong một phạm vi
- 11. Node.js - Cách tạo số ngẫu nhiên trong phạm vi cụ thể bằng cách sử dụng crypto.randomBytes
- 12. Tạo một số ngẫu nhiên trong một phạm vi bằng cách sử dụng C#
- 13. Tạo một số ngẫu nhiên gấp đôi của một phạm vi nhất định trong Java
- 14. Số nguyên ngẫu nhiên
- 15. Tạo một số ngẫu nhiên trong phạm vi 0-9 trong x86 8086 Hội
- 16. tạo ngẫu nhiên số nguyên 64 bit
- 17. Tạo số ngẫu nhiên có trọng số trong R
- 18. Tạo các số ngẫu nhiên duy nhất trong một phạm vi
- 19. Cách tạo số ngẫu nhiên dài trong clojure
- 20. Số nguyên tố ngẫu nhiên trong python
- 21. Trình tạo số ngẫu nhiên tạo số nguyên cho Java
- 22. Thông số loại Fortran 90
- 23. tạo số ngẫu nhiên ngắn trong java?
- 24. Làm cách nào để tạo một số ngẫu nhiên trong một phạm vi nhưng loại trừ một số?
- 25. Cách tạo số ngẫu nhiên "lớn" trong Python?
- 26. Tạo số ngẫu nhiên 2^30
- 27. Cách lấy một số ngẫu nhiên từ một phạm vi, ngoại trừ một số giá trị
- 28. Cách tạo số ngẫu nhiên nhanh hơn trong R?
- 29. Số ngẫu nhiên trong POSIX C API
- 30. Tạo số ngẫu nhiên trong C
'rand' là phần mở rộng của GNU. Sự kết hợp Fortran 95 là 'random_seed' và' random_number'. –
Kết quả của chính xác 5 có thể chấp nhận được đối với bạn không? Hay bạn muốn hỏi về phạm vi [0,5]? Các đề xuất bên dưới sẽ không cung cấp cho bạn chính xác giá trị điểm cuối (ngoại trừ có thể bằng cách làm tròn.) –
@SteveLionel Tôi không chắc chắn ý bạn là gì ... Bạn có thể mở rộng trên đó không? –