Sono una specie di nuovo nel fortran proramming. Qualcuno può aiutarmi con la soluzione. Sto avendo un problema di generare numero intero casuale nel range [0,5] in numero casuale FORTRAN utilizzando random_seed e randcome generare il numero casuale intero in fortran 90 nell'intervallo [0,5]?
risposta
Che dire:
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
Usa 'reale :: ...' e '6.' quindi. Ma per favore, fai un favore a te stesso e passa alle definizioni esplicite! –
'i = floor (r * 3.) - 1' –
ok, ma darà una distribuzione uniforme .....? \ – user3531410
Per sostenere la answer da Alexander Vogt , Generalizzerò.
L'intrinseco random_number(u)
restituisce un numero reale u
(o un array di tale) dalla distribuzione uniforme nell'intervallo [0,1). [Ovvero, include 0 ma non 1.]
Per avere una distribuzione uniforme discreta sugli interi {n, n + 1, ..., m-1, m} intagliare la distribuzione continua in m + 1-n pezzi di dimensioni uguali, mappando ogni pezzo in un numero intero. Un modo potrebbe essere:
call random_number(u)
j = n + FLOOR((m+1-n)*u) ! We want to choose one from m-n+1 integers
Come si può vedere, per la domanda iniziale per {0, 1, 2, 3, 4, 5} Questo riduce al
call random_number(u)
j = FLOOR(6*u) ! n=0 and m=5
e per l'altro caso nel tuo commento {-1, 0, 1}
call random_number(u)
j = -1 + FLOOR(3*u) ! n=-1 and m=1
Naturalmente, altre trasformazioni saranno necessari per i set di numeri interi non contigui, e si dovrebbe prestare attenzione ai problemi numerici.
per evitare l'obliquità a causa del numero limitato di bit in mantissa 'reale' (53 per IEEE 754 a doppia precisione, 24 per singolo -precisione), potresti dover chiamare 'random_number' diverse volte, ad esempio, vedi [come' _randbelow (n) 'è implementato tramite' random() 'in Python] (https://github.com/python/cpython/blob /1dae7450c68bad498e57800387b24cb103c461fa/Lib/random.py#L243-L248) – jfs
- 1. come generare un numero casuale da 0,5 a 1,0
- 2. Come generare il numero float casuale C
- 3. Fortran 90 Risorse?
- 4. Numero intero casuale con condizioni
- 5. Come generare un numero casuale in Swift senza ripetere il numero casuale precedente?
- 6. Come generare un numero lungo in modo casuale nel clojure
- 7. Numero intero casuale Javascript tra due numeri
- 8. software di conversione per fortran 77 a fortran 90
- 9. Come posso generare un numero intero casuale tra min e max in java?
- 10. Come generare un numero intero senza segno casuale a 64 bit in C
- 11. Libreria Fortran 90/95 per matrici sparse?
- 12. Come generare casuale distribuito casualmente da un intervallo intero?
- 13. Come generare un numero pseudo casuale in FPGA?
- 14. casuale genera numero 1 oltre il 90% di volte in parallelo
- 15. Unità standard di input e output in Fortran 90?
- 16. Emulazione di spazi dei nomi in Fortran 90
- 17. Come generare un numero casuale dalla distribuzione discreta specificata?
- 18. genera un numero intero casuale a 64 bit
- 19. Come generare un numero casuale di cinque cifre Java
- 20. Fortran: il più grande e il più piccolo intero
- 21. Come generare ID univoco in Java (intero)?
- 22. Come ottenere mysql range intero casuale?
- 23. Come generare un numero casuale con 8 cifre in totale in C#? (4 intero, 4 parte frazionaria)
- 24. Come generare un numero univoco casuale in PostgreSQL usando la funzione
- 25. Come generare un numero intero univoco dalla stringa?
- 26. Come generare un'immagine completamente casuale?
- 27. numero ios rotonda a int o 0,5
- 28. Come leggere il numero intero in Erlang?
- 29. Come generare una data casuale in Ruby?
- 30. Get intero casuale nella gamma (x, y]
'rand' è un'estensione GNU. La combinazione di Fortran 95 è 'random_seed' e' random_number'. –
Il risultato è esattamente 5 accettabile per te? O intendevi chiedere la gamma [0,5)? I suggerimenti che seguono non ti forniranno esattamente il valore dell'endpoint (tranne forse per arrotondamento). –
@SteveLionel Non sono abbastanza sicuro di cosa intendi ... Potresti ampliarlo? –