Polecenia języków programowania za zwyczaj odnoszą się do różnego rodzaju danych. Wwewnętrzna organizacja współczesnych komputerów jest binarna (dwójkowa). Oznacza to, że wszystkie dane zapisywane są w formatach binarnych. Standardowo, komputery mogą operować na danych typu całkowitoliczbowego oraz na danych typu niecałkowitego. Standardowa matematyka operuje znacznie bogatszym zestawem danych. Rozróżniamy:
Dodać trzeba, że zbiory liczb naturalnych, całkowitych i wymiernych są równoliczne a każdy z nich zawiera nieskończenie wiele elementów. Komputery we wszystkich swoich obliczeniach korzystają albo ze skończonego podzbioru liczb całkowitych albo ze skończonego podzbioru liczb wymiernych. Pierwsze liczby nazywane są w Fortranie INTEGER, a drugie — REAL.
Język Fortran zna następujące typy danych:
INTEGER
ogólnie typ całkowity, w szczególnych przypadkach można zadeklarować ile bajtów zostanie zużytych na wartości; do wyboru są wartości 1 (8 bitów), 2 (16 bitów), 4 (32 bity) i 8 (64 bity):INTEGER*1
INTEGER*2
INTEGER*4
INTEGER*8
REAL
— ogólnie tyb „rzeczywisty”; do zapisu można używać 32, 64 albo 128 bitów:REAL*4
REAL*8
REAL*16
DOUBLE PRECISION
czyli REAL*8
— liczby „rzeczywiste” podwójnej precyzjiCOMPLEX
— liczby zespolone i DOUBLE COMPLEX
— zespolone podwójnej precyzjiLOGICAL
— typ służący do zapisu wartości logicznych (i znowu mimo, że do zapisu wartości logicznej wystarczyłby jeden bit, wykorzystuje się — podobnie jak w przypadku wartości całkowitych — 1, 2, 4 lub 8 bajtów.CHARACTER
— każda litera kodowana jest jako liczba całkowita. Typ typu CHARACTER
przechować może jeden znak.Jedną z najgorszych cech Fortranu (ale wiem to dopiero po latach) jest brak konieczności deklaracji nazw zmiennych i ich typów. Powoduje to, że następujący kod jest opoprawny:
1 program test
2 i = 3 ! W tym miejscu deklaruję zmienną całkowitą i, a anstępnie nadaję jej wartość
3 print *, i*2
4 end program test
Po prostu zakłąda się, że zmienne skalarne o nazwach zaczynających się od litery I, J, K, L, M, N są całkowite, a pozostałe (nazwy zaczynające się od pozostałych liter) — rzeczywiste. Być może jest to wygodne, ale prowadzi do wielu nieporozumień i błędów.
Zwracam również uwagę, że oprócz typów „podstawowych” (INTEGER
, REAL
, LOGICAL
) można używać typów specyficznych, deklarując ilość pamięci niezbędnej do przechowania wartości. I tak INTEGER
to będzie typ całkowity o długości 4 bajtów (32 bity) czyli INTEGER*4
. Zmienna tego typu może służyć do przechowywania wartości z zakresu od -2,147,483,648 do 2,147,483,647. Natomiast INTEGER*2
(16 btów) jest w stanie służyć do przechowywania wartości całkowitych z zakresu od -32,768 do 32,767. INTEGER*8
to oczywiście liczby całkowite sześćdziesięcioczerobitowe.
Podobnie z typem REAL
— odpowiada to trzydziestodwubitowym liczbom zmiennoprzecinkowym z zakresu od 1.17549435E-38 do 3.40282347E38 czyli jest to typ REAL*4
. typ DOUBLE PRECISION
to inaczej REAL*8
przechowywać może wartości z zakresu 2.2250738585072013D-308 do 1.7976931348623158D308.
Wydaje mi się, że sposób zapisu danych może budzić wiele wątpliwości. Sugeruję następujące lektury dodatkowe:
Są to wszystko dosyć podstawowe slajdy bądź materiały do zajęć z Technologii Informacyjnych, Informatyki (czyli programowania w języku C) oraz z Metod Numerycznych. Postaram się dodać bogatsze komentarze, pozwalające lepiej zrozumieć problemy związane z arytmetyką komputerów. Natomiast podkreślić należy, że standardowy typ REAL w języku Fortran (będący odpowiednikiem typu float w języku C) zapewnia niezbyt wielki zakres (1E38) i marną precyzję: 24 cyfry dwójkowe liczby w zapisie „naukowym”. Podkreśłić trzeba, że te 24 cyfry tłumaczą się jako 6 (czasmi 7) znaczących cyfr dziesiętnych. Nie jest to duża precyzja. Dopiero realizacja obliczeń z użyciem liczb podwójnej precyzji (DOUBLE PRECISION
albo REAL*8
w języku Fortran albo double w języku C) pozwala osiągnąć i większy zakres liczb (1D308) jak i nieco więcej cyfr znaczących: 53 cyfry dwójkowe, co tłumaczy się na 17 (a czasmi tylko 16) cyfr dziesiętnych.