2017-12-01 1 views
1

Einfache Frage: Ich schaue auf Fortran-Code in einem atmosphärischen Modell, und wann immer eine reelle Variable deklariert wird, wird sie immer z. als real :: foo = 1. anstelle von real :: foo = 1. Ist dieser abschließende Dezimalpunkt erforderlich?Wenn eine reelle Variable ohne Ziffern hinter dem "Einsen" Platz ist, ist der nachgestellte Dezimalpunkt erforderlich oder ästhetisch?

Und würden sich diese Regeln ändern, wenn Parameter aus einer Namelist-Datei gelesen werden? Zum Beispiel kann ich schreibe in der Namensliste

&main_nml 
    foo = 1 
/

statt

&main_nml 
    foo = 1. 
/

und die Variable in der ursprünglichen Modul mit namelist /main_nml/ foo lesen?

Schließlich ändert sich diese Antwort für verschiedene Versionen von Fortran?

Antwort

3

Wenn im Quellcode wie

real :: x=1 
real :: y=1. 

dort auftretenden ein Unterschied zu einer lexikalischen Ebene. Im ersten Fall ist 1 eine literale Ganzzahlkonstante; in der zweiten 1. ist eine literale (Standard) reale Konstante. Das heißt, die Ganzzahl 1 wird im Rahmen der Initialisierung in den Typ x konvertiert. Es ist sehr wahrscheinlich, dass x und y auf den gleichen Wert initialisiert werden.

In beiden Fällen handelt es sich um legitime Deklarationen. In diesem Sinne ist das Dezimalsymbol nicht erforderlich, obwohl es einen technischen Unterschied gibt.

Mit Namelist Eingabe Dinge sind etwas anders. In den Eingabedateien 1 und 1. keine Literalkonstanten (nicht im Quellcode). Stattdessen wird der Wert in der Eingabe als der Typ der Variablen interpretiert, auf die er angewendet wird. In Ihrem Fall wird foo standardmäßig als real angenommen, dann werden sowohl 1 als auch 1. als reelle Standardwerte betrachtet.

Ein reeller Wert in einer Namenslisteneingabe muss kein Dezimalsymbol haben. Ohne diesen Wert hat der Wert keinen Bruchteil. In diesem Sinne besteht kein Unterschied zwischen dem Vorhandensein und dem Fehlen des Dezimalsymbols und die Werte sind gleich.

Ohne tiefer zu erforschen, sind mir keine Änderungen bekannt, wie diese Dinge zwischen Revisionen der Sprache interpretiert werden.

Dies ist ein guter Zeitpunkt zu beachten, dass die Dinge sehr unterschiedlich sind, wenn formatierte (nicht nameliste) Eingabe betrachtet wird. Das Fehlen eines Dezimalzeichens kann bei bestimmten Formaten very confusing sein.

Verwandte Themen