Fortran: Umgang mit integer-Werten Größe: ~700000000000
Derzeit bin ich Bürsten bis auf meine Fortran95 wissen (frag nicht warum)...
Ich bin mit in zu ein problem sein. Wie geht man mit großen zahlen, zB. Größe: ~700000000000
INTEGER(KIND=3) nicht halten diese Zahl.
Wenn jemand interessiert ist, die compiler, die ich zur Verfügung hab Silverfrost FTN95.
Ich bin mit die ganze Zahl durch eine größere Datenmenge.
Haben Sie irgendwelche Vorschläge?
- Wenn man Fragen darf, für was braucht man eine solche Reihe ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den standard-Lösung (seit Fortran 95, also ich nehme an, dein compiler unterstützt), ist die Verwendung der
SELECTED_INT_KIND
spezifischen Sonde für gültige integer-Arten (deren Werte sind compiler-abhängig) und dieRIESIGE
immanent.SELECTED_INT_KIND (R)
gibt die Art Typ-parameter von einem integer-Typ repräsentiert alle ganzzahligen Werte n mit -10^R < n < 10^R (und gibt -1 zurück, wenn kein solcher vorhanden ist).HUGE (K)
liefert die größte Darstellbare Zahl in integer-Typ der Art K.Zum Beispiel auf meinem Mac mit einem x86_64-Prozessor (gfortran compiler, 64-bit-Modus) das folgende Programm:
Ausgänge:
was mir sagt, dass ich verwenden würde, ein
integer(kind=8)
für Ihren job.kind=3
- und Fortran, Silverfrost dannkind=8
ist nicht eine gute Sache. Es gibt keine Art 8 in Fortran, Silverfrost. Zumindest nicht in den normalen Einstellungen. Man kann nur direkt verwendenselected_int_kind (12)
in eine benannte Konstante, wie gezeigt, in anderen Antworten.Portable zu deklarieren integer "index", die mindestens 12 Dezimalstellen ist:
Die "Art=" weggelassen werden kann.
Mithilfe bestimmter Werte wie 3 ist absolut nicht tragbar und wird nicht empfohlen. Einige Compiler die Typ-Nummern nacheinander ein, andere nutzen die Anzahl der bytes. Die "selected_int_kind" zurück, die Art, die Anzahl der die kleinste ganze Zahl, die Art zur Verfügung, die für den compiler, die darstellen können, dass die angeforderte Anzahl von Ziffern. Wenn kein solcher Typ vorhanden ist, wird -1 zurückgegeben und der Wert wird scheitern, wenn die verwendete Art Wert zu deklarieren Sie eine integer.
Sowohl gfortran und ifort Rückkehr eine Art für decimal digits input zu selected_int_kind bis zum 18. Große Werte wie 18 wird in der Regel wählen Sie eine 8-byte-Ganzzahl mit einem größten positiven Wert 9223372036854775807. Dieser hat 19 stellen, aber wenn ein compiler unterstützt diesen Typ aber nicht mehr ein, selected_int_kind (19) werden mit -1, weil nicht alle 19-stelligen ganzen zahlen darstellbar sind.
Gibt es eine Reihe von kostenlosen eine beliebige Präzision Bibliotheken verfügbar für Fortran-was würde mit diesem problem umzugehen. FMLIB ist. Fünf oder sechs weitere alternativen sind von dieser Seite aus verlinkt.
Wenn Sie es als loop control variable, aber nicht mit den integer-direkt (ich glaube, das können Sie nicht, da Sie nicht können, deklarieren Sie ein array größer als der größte index darstellbar sein, oder?), dann denke ich, dass das, was zu tun ist, teilen Sie die Welpen von so etwas wie 100000 nest und seine Schleife in eine andere Schleife, die durchläuft, dass viele Male.
Haben Sie versucht, INTEGER(KIND=4)?
Unsere Antwort darauf war, den Wert in eine double-precision-variable und nicht eine KRAFT auf Sie, um loszuwerden, keine gebrochene Teile.
Die Ergebnisse sind eine ganze Zahl platziert in einer double-precision-variable.
Die Funktion DINT ist nicht immer für alle FORTRANs. Die Funktion ist eine double-precision-integer-Funktion und dies ermöglicht es für sehr große zahlen (bis zu 17-stellig).