2013-03-28 13 views
9

Mam trudności z zawijaniem głowy wokół instrukcji formatowania w Fortranie.Fortran splata moje dane wyjściowe z gwiazdkami - dlaczego?

bez formatowania moje wyjście, to jest to, co robię (wewnątrz pętli, tak dzieje się kilka razy):

write(*,*) t*1E9 

t tutaj jest real*8. Wyjście jest tylko to, czego się spodziewać - przyrosty 0.1, z pewnymi błędami zaokrągleń:

0.0000000000000000  
0.10000000000000001  
0.20000000000000001  
0.29999999999999999  
0.40000000000000002  
0.50000000000000000  
0.59999999999999998  
0.69999999999999996  
0.79999999999999993  
0.89999999999999991  
0.99999999999999989 

Teraz próbuję dodać oświadczenie format:

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

i (ze wszystkim taki sam) zamiast tylko dostać gwiazdki w moim wyjściu:

** 
** 
(etc...) 

próbowałem przeczytać o tym, jak to powinno działać, a ja nie mogę zrozumieć, dlaczego tak się dzieje. Próbowałem formatów z większą ilością miejsca na cyfry (F15.15 po prostu daje mi więcej gwiazdek w linii), Próbowałem przenieść oświadczenie formatu do własnej, oznaczonej linii ... Po prostu nie mogę uzyskać wyjścia I ' d jak.

Czego mi tu brakuje?

Odpowiedz

15

Fortran stwierdzenia formatu są zdefiniowane jako:

Fw.d, gdzie W jest liczbą znaków być stosowany w całości, a d jest liczbą znaków po przecinku. Tutaj mówisz, że potrzebujesz float, który ma szerokość 1 znaku i 2 znaki po przecinku, coś, co oczywiście nie jest poprawne. Tak aby, na przykład, że pływak jest 4 znaki w sumie z 3 miejsc po przecinku, to by napisać:

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

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

Ponadto, należy wspomnieć, że gwiazdki wskazują, że numer nie może być wyświetlony w podanym formacie.

EDIT:

Dodawanie w komentarzu George poniżej:

„Dla formatu E szerokości pola musi wynosić co najmniej 7 więcej niż liczba miejsc po przecinku, np E15.8 Cztery dla wykładnika. , dwa dla ołowiu 0. jeden dla możliwego "-". Zazwyczaj dodaję jeszcze jedną dodatkową przestrzeń, aby numery nie działały razem, E16.8 "

+0

Dzięki! To wiele wyjaśnia =) Jednak nie pomaga mi to całkowicie - kiedy stosuję te same zasady, chociaż z np. 'E5.4', dla innych podwójnych (tj.' Prawdziwe * 8's), jedna kolumna o rzędzie wielkości 1e-2 - 1e-3 i jedna o rzędzie wielkości 1e2, podaje medyczną gwiazdkę dla tych kolumn (czas kolumna działa zgodnie z oczekiwaniami). Cały mój ciąg formatowania w tym momencie: 'F4.2, E10.8, E10.8'. –

+4

Dla formatu E szerokość pola musi wynosić co najmniej 7 więcej niż liczba miejsc dziesiętnych, np. E15.8. Cztery dla wykładnika, dwa dla ołowiu 0. jeden dla możliwego "-". Zwykle dodaję jeszcze jedną dodatkową przestrzeń, żeby numery nie działały razem, E16.8 .. – agentp

+0

To wyjaśnia - dzięki! –

Powiązane problemy