Встроенные типы данных
Исходно в Фортране предопределены следующие встроенные типы данных:
- числовые
- integer (целые)
- real (вещественные)
- double precision (вещественные двойной точности)
- complex (комплексные)
- нечисловые
- logical (логические)
- character (символьные)
Созвучные по названию операторы позволяют также объявить типы идентификаторов:
integer a,b,c double precision f,g logical fl
Параметр разновидности типа
Такой подход не позволяет подробно задавать представление данных в памяти (вспомним типы short и long в C), хотя и достаточно для большинства вычислительных задач. Начиная с f90 стандартом предусмотрена возможность указывать дополнительно параметр разновидности типа. Параметр разновидности типа указывается в скобках после оператора объявления типа:
integer (kind=1) :: a,b,c real (8) ::f,g integer, parameter :: T=8 integer (kind=T) :: x1, x2
Как видно из примера, параметр разновидности может содержать необязательное ключевое слово (kind=) и представляет собой константу или именованную константу целого типа. Сама константа показывает сколько байтов отводится под хранение данных этого типа.
Очевидно, что побайтовый способ выделения памяти под данные не самый понятный, поэтому в стандарте введены специальные функции, отвечающие за вычисление размера отводимой памяти.
Это встроенные функции selected_int_kind и selected_real_kind, возвращающие целое значение, равное запрашиваемому параметру разновидности типа. Рассмотрим их использование на примере:
integer (kind=selected_int_kind(10)) :: a,b,c integer, parameter :: R = selected_real_kind(12,30) real (kind=R) :: x1, x2
Здесь для переменных a, b, c задан такой целый тип, размер которого позволяет хранить десятизначные целые значения. То есть запрос вида selected_int_kind(N) указывает компилятору выделить для хранения соответствующих целых значений такой тип, который позволит работать как минимум с N-значными целыми, если это возможно.
Запрос selected_real_kind(M,R) требует выделить вещественный тип, обеспечивающий длину мантиссы не менее M, и показатель степени не менее R. Таким образом, мы запросили дл вещественных X1 и X2 такой тип, в котором длина мантиссы больше или равна 12, а модуль показателя экспоненты не меньше 30.