2013-03-28 4 views
9

Mir fällt es schwer, mich mit Formatierungen in Fortran zu beschäftigen.Fortran splats meine Ausgabe auf Sternchen - warum?

Ohne meine Ausgabe Formatierung, ist das, was ich zu tun (in einer Schleife, so geschieht dies ein paar Mal):

write(*,*) t*1E9 

t hier ist real*8. Der Ausgang ist genau das, was ich erwarten würde - Schritte von 0,1, wobei einige Rundungsfehlern:

0.0000000000000000  
0.10000000000000001  
0.20000000000000001  
0.29999999999999999  
0.40000000000000002  
0.50000000000000000  
0.59999999999999998  
0.69999999999999996  
0.79999999999999993  
0.89999999999999991  
0.99999999999999989 

Jetzt versuche ich, ein Format Anweisung hinzuzufügen:

write(*, '(F1.2)') t*1E9 

und (mit allem anderen den gleichen statt) bekomme ich nur Sternchen in meiner Ausgabe:

** 
** 
(etc...) 

ich habe versucht, auf zu lesen, wie das funktionieren soll, und ich kann nicht herausfinden, warum dies geschieht. Ich habe versucht, Formate mit mehr Platz für Ziffern (F15.15 gibt mir nur mehr Sterne pro Zeile), ich habe versucht, die Formatanweisung zu seiner eigenen, beschriftete Zeile zu bewegen ... Ich kann einfach nicht scheinen, um die Ausgabe zu erhalten I ' d wie.

Was fehlt mir hier?

Antwort

15

Fortran-Format-Anweisungen sind definiert als:

Fw.d, wobei W die Anzahl der Zeichen zu insgesamt eingesetzt werden, und d ist die Anzahl der Zeichen nach dem Dezimalpunkt. Hier sagen Sie, dass Sie einen Float benötigen, der insgesamt 1 Zeichen breit ist, und 2 Zeichen nach dem Komma, was offensichtlich nicht korrekt ist. So erhalten zum Beispiel einen Schwimmer, der 4 Zeichen insgesamt ist, mit drei Dezimalstellen, dann würden Sie schreiben:

write(*, '(F4.3)') t*1E9 

Siehe http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html

Auch sollte ich erwähnen, dass die Sternchen indikativ sind, dass Die Nummer kann nicht im angegebenen Format angezeigt werden.

EDIT:

im Kommentar von george unter Hinzufügen:

„Für E-Format der Feldlänge mindestens 7 mehr als die Anzahl der Dezimalstellen sein muss, zB E15.8 Vier für die Exponenten. Zwei für die Lead 0. Eins für ein mögliches "-". Normalerweise füge ich noch einen zusätzlichen Platz hinzu, damit Zahlen nicht zusammen laufen, E16.8 "

+0

Vielen Dank! Das erklärt viel =) Jedoch hilft es mir nicht den ganzen Weg - wenn ich die gleichen Prinzipien anwende, obwohl mit z. 'E5.4', für andere Doubles (dh' real * 8's), eine Spalte in der Größenordnung 1e-2-1e-3 und eine in der Größenordnung 1e2, gibt es Med-Sternchen für diese Spalten (die Zeit Spalte funktioniert wie erwartet). Meine gesamte Formatzeichnung im Moment: 'F4.2, E10.8, E10.8'. –

+4

Für das E-Format muss die Feldbreite mindestens 7 mehr als die Anzahl der Dezimalstellen betragen, zB E15.8. Vier für den Exponenten, zwei für den Vorsprung 0. Eins für ein mögliches '-'. Ich füge normalerweise einen zusätzlichen Platz hinzu, damit Zahlen nicht zusammen laufen, E16.8 .. – agentp

+0

Das erklärt es - danke! –

Verwandte Themen