Ich bin etwas neu in der Fortran-Programmierung. Kann mir bitte jemand mit der Lösung helfen. Ich habe ein Problem der ganzzahligen Zufallszahl im Bereich Erzeugung von [0,5] in Fortran Zufallszahl random_seed und randWie generiere ich eine ganze Zahl in Fortran 90 im Bereich [0,5]?
Antwort
Was:
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
Verwenden Sie 'real :: ...' und '6.' dann. Aber bitte, tu dir selbst einen Gefallen und wechsle zu expliziten Definitionen! –
'i = Boden (r * 3.) - 1' –
das ist in Ordnung, aber wird es gleichmäßige Verteilung geben .....? \ – user3531410
Um die answer von Alexander Vogt zu unterstützen Ich verallgemeinere.
Die intrinsische random_number(u)
gibt eine reelle Zahl u
(oder ein Array von solchen) aus der Gleichverteilung über das Intervall [0,1). [Das heißt, es enthält 0, aber nicht 1.]
Um eine diskrete gleichförmige Verteilung auf den ganzen Zahlen {n, n + 1, ..., m-1, m} zu haben, schneide die kontinuierliche Verteilung bis in m + 1-n-Chunks gleicher Größe, wobei jeder Chunk auf eine ganze Zahl abgebildet wird. Eine Möglichkeit könnte sein:
call random_number(u)
j = n + FLOOR((m+1-n)*u) ! We want to choose one from m-n+1 integers
Wie Sie sehen können, für die Ausgangsfrage für {0, 1, 2, 3, 4, 5} dies reduziert auf
call random_number(u)
j = FLOOR(6*u) ! n=0 and m=5
und für den anderen Fall in Ihrem Kommentar {-1, 0, 1}
call random_number(u)
j = -1 + FLOOR(3*u) ! n=-1 and m=1
natürlich werden andere Transformationen für Sätze von nicht zusammenhängenden ganzen zahlen erforderlich sein, und man sollte die Aufmerksamkeit auf numerische Probleme zu zahlen.
zu vermeiden, Skew wegen der begrenzten Anzahl von Bits in 'echten' Mantisse (53 für IEEE 754 Double-Precision, 24 für Single -precision), müssen Sie vielleicht 'random_number' mehrmals aufrufen, zB [wie' _randbelow (n) 'über' random() 'in Python implementiert wird] (https://github.com/python/cpython/blob) /1dae7450c68bad498e57800387b24cb103c461fa/Lib/random.py#L243-L248) – jfs
- 1. Konvertieren einer Zeichenfolge in eine Ganzzahl in Fortran 90
- 2. Wie generiere ich eine Zufallszahl in einem Bereich im Makefile?
- 3. Numerische Integration in Fortran 90
- 4. Fortran 90 OPEN-Datei
- 5. Fortran 90 Ressourcen?
- 6. Fortran 90 Art Parameter
- 7. Wie stdout in Fortran 90 zu spülen?
- 8. Deklarieren eine ganze Zahl Bereich mit Schritt = 1 in Ruby
- 9. Speicher eine ganze Zahl im Kerndaten
- 10. Wie ziehe ich eine ganze Zahl aus einem NSDictionary und lege sie in eine ganze Zahl?
- 11. Fortran 90 zu Python-Array
- 12. Wie generiere ich ganze Java-Bohnen?
- 13. Wie vorzuverlegen eine ganze Zahl
- 14. Fortran 90, Kompilieren Programm: Fehlermeldungen
- 15. Wie wandle ich eine ganze Zahl in eine Zeichenfolge um?
- 16. Increment eine ganze Zahl
- 17. eine ganze Zahl in Xslt
- 18. Übergabe echte Arrays von Fortran 90 bis Fortran 77
- 19. Wie kann ich diesen einfachen Fortran 90 Code schneller machen?
- 20. Wie man eine Zahl auf eine gewählte ganze Zahl rundet
- 21. Konvertieren eine ganze Zahl base36
- 22. Wie kann ich ein Datum in eine ganze Zahl umwandeln?
- 23. Wie spalte ich eine ganze Zahl in 2-Byte-Binärdatei?
- 24. Konverter-Software für Fortran 77 bis Fortran 90
- 25. Viele ganze Zahlen in eine große ganze Zahl packen
- 26. Eine Zeichenfolge in eine ganze Zahl aufteilen
- 27. Generiere eine Zahl ist Bereich (1, n), aber nicht in einer Liste (i, j)
- 28. Umwandlung einer Elixir-Zahl in Exponentialschreibweise in eine ganze Zahl
- 29. Wie eine ganze Zahl zwischen Aktivitäten übergeben?
- 30. Bewerten Sie eine Funktion mit einer Schleife Fortran 90
'rand' ist eine GNU-Erweiterung. Die Fortran 95 Kombination ist 'random_seed' und' random_number'. –
Ist ein Ergebnis von genau 5 akzeptabel für Sie? Oder wollten Sie nach der Bandbreite [0,5] fragen? Die folgenden Vorschläge geben Ihnen nicht genau den Endpunktwert (außer möglicherweise durch Runden.) –
@SteveLionel Ich bin nicht ganz sicher, was Sie meinen ... Könnten Sie das weiter ausführen? –