wie erzeugt integer-Zufallszahlen in fortran 90 im Bereich [0,5]?
Ich bin Art von neuen in die fortran-proramming.
Kann jemand bitte helfen Sie mir mit der Lösung.
ich habe ein problem in der Erzeugung von ganzzahligen Zufallszahlen
im Bereich [0,5] in fortran random number using
random_seed und rand
rand
ist eine GNU-Erweiterung. Der Fortran 95-Kombination istrandom_seed
undrandom_number
.- Ist eine Folge von genau 5, für Sie akzeptabel? Oder meinten Sie bitten, für den Bereich [0,5) ? Die Vorschläge, die unten nicht geben Ihnen genau den Endpunkt Wert (außer vielleicht durch Rundung.)
- Ich bin mir nicht ganz sicher, was du meinst... Könntest du das näher?
- Man verwendet den Begriff "[0,5]". Dies ist die "Intervall-notation", das heißt, der Wert kann überall von exakt 0, um genau 5. Auf die überprüfung, dass vielleicht, was Sie wollen. francescalus' Antwort weiter unten ausführlich erklärt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was:
real :: ...
und6.
dann. Aber bitte, tun Sie sich einen gefallen und wechseln Sie zu expliziten Definitionen!i = floor( r*3. ) - 1
Zur Unterstützung der Antwort von Alexander Vogt, ich werde verallgemeinern.
Die intrinsische
random_number(u)
gibt eine reelle Zahlu
(oder ein array von solchen) aus der Gleichverteilung über dem Intervall [0,1). [Das heißt, es enthält 0 aber nicht 1.]Haben eine diskrete Gleichverteilung auf den ganzen zahlen {n, n+1, ..., m-1, m} schnitzen die kontinuierliche Verbreitung bis in die m+1-n gleich große Stücke, die Abbildung jeder chunk eine ganze Zahl. Eine Möglichkeit könnte sein:
Wie Sie sehen können, für die erste Frage {0, 1, 2, 3, 4, 5} diese reduziert sich auf
und für den anderen Fall in Ihrem Kommentar { -1, 0, 1}
Natürlich auch andere Transformationen erforderlich, Sätze von nicht-zusammenhängenden ganzen zahlen, und man sollte darauf achten, zu numerischen Problemen.
real
Mantisse (53 für IEEE 754 double precision, 24 für single-precision), Sie möglicherweise benötigen, rufen Sierandom_number
mehrere Male, z.B., siehe wie_randbelow(n)
erfolgt überrandom()
in Python