2012-05-09 6 views
20

Das Handbuch eines in Fortran 90 geschriebenen Programms sagt: "Alle realen Variablen und Parameter sind in 64-Bit-Genauigkeit angegeben (d. H. real*8)."Was bedeutet "real * 8"?

Gemäß Wikipedia entspricht die einfache Genauigkeit der 32-Bit-Genauigkeit, während die doppelte Genauigkeit der 64-Bit-Genauigkeit entspricht. Daher verwendet das Programm offensichtlich doppelte Genauigkeit.

Aber was bedeutet real*8?

Ich dachte, dass die 8 bedeutet, dass 8 Ziffern folgen dem Komma. Jedoch scheint Wikipedia zu sagen, dass einfache Genauigkeit typischerweise 6-9 Ziffern bereitstellt, während double precision typischerweise 15-17 Ziffern bereitstellt. Bedeutet dies, dass die Aussage "64-Bit-Genauigkeit" nicht mit real*8 übereinstimmt?

Antwort

28

Die Zahl 8 bezieht sich auf die Anzahl der Bytes, die der Datentyp verwendet.

Also eine 32-Bit-Ganzzahl ist integer*4 in den gleichen Zeilen.

fand eine schnelle Suche this guide to Fortran data types, die beinhaltet:

von

Die „real * 4“ -Anweisung der Variablennamen spezifiziert single precision 4-Byte-reelle Zahlen zu sein, die besteht aus 7 Stellen an Genauigkeit und einen Größenbereich 10 von -38 bis +38. Die "echte" Anweisung ist die gleiche wie die "real * 4" -Anweisung in fast allen 32-Bit-Computern.

und

Die "real * 8" Anweisung gibt die Variablennamen double precision 8-Byte-reelle Zahlen zu sein, die sich von -308 15 Stellen Genauigkeit und mit einer Größe zwischen 10 bis + 308. Die Anweisung "double precision" entspricht in fast allen 32-Bit-Computern der Anweisung "real * 8".

+9

-1 für Jon Skeet, der eine Fortran-Frage beantwortet, indem er von einer archaischen und irreführenden Referenz zitiert. Die anderen Antworten auf diese Frage zeigen ein besseres Verständnis des modernen Fortran. –

+5

@HighPerformanceMark: Vielleicht könnten Sie einen nützlicheren Link für mich geben, um dann zu ändern? Ich werde sicherlich nicht behaupten, dass ich etwas über Fortran weiß, aber ist der Kern der Antwort (dass die 8 die Anzahl der Bytes darstellt) tatsächlich falsch oder irreführend? –

10

Der Stern-Notation (als TYPE*n genannt wird) ist ein Nicht-Standard-Fortran-Konstrukts, wenn als CHARACTERTYPE mit anderen eingesetzt.

Bei Anwendung auf einen Zeichentyp wird ein Array von n Zeichen (oder eine Zeichenkette aus n Zeichen) erstellt.

Bei Anwendung auf einen anderen Typ wird die Speichergröße in Byte angegeben. Dies sollte um jeden Preis in Fortran 90+ vermieden werden, wo das Konzept vom Typ KIND eingeführt wird. Durch Angabe der Speichergröße werden nicht portierbare Anwendungen erstellt.

21

Es gibt jetzt mindestens 4 Möglichkeiten, die Genauigkeit in Fortran anzugeben.

Wie bereits beantwortet, gibt real*8 die Anzahl der Bytes an. Es ist etwas veraltet, sollte aber sicher sein.

Der neue Weg ist mit "Arten". Man sollte die intrinsischen Funktionen verwenden, um die Art zu erhalten, die die benötigte Genauigkeit hat. Die Angabe der Art durch einen bestimmten numerischen Wert ist riskant, da unterschiedliche Compiler unterschiedliche Werte verwenden.

Noch eine andere Möglichkeit besteht darin, die benannten Typen von ISO_C_Binding zu verwenden.This question diskutiert das Art-System für Ganzzahlen - es ist sehr ähnlich für Real.

+5

UPDATE: Die Erweiterung Fortran 2008 des ISO-Umgebungsmoduls wird jetzt häufiger unterstützt. Wenn Sie also ISO_FORTRAN_ENV verwenden, haben Sie Zugriff auf Werte, die Real- und Integer-Typen nach Anzahl der Bits angeben (zB 'real (real32) ::' und 'real (real64) ::') als Standard und portabel Möglichkeit, Typen nach Speichergröße zu spezifizieren. –