KIND переменной - это целочисленная метка, которая указывает компилятору, какой из поддерживаемых типов он должен использовать.
Помните, что хотя обычно для параметра KIND совпадает с числом байтов, хранящихся в переменной этого KIND, не требуется по стандарту Fortran .
То есть на многих системах
REAl(KIND=4) :: xs ! 4 byte ieee float
REAl(KIND=8) :: xd ! 8 byte ieee float
REAl(KIND=16) :: xq ! 16 byte ieee float
но могут быть компиляторы, например, с:
REAL(KIND=1) :: XS ! 4 BYTE FLOAT
REAL(KIND=2) :: XD ! 8 BYTE FLOAT
REAL(KIND=3) :: XQ ! 16 BYTE FLOAT
Аналогично для целых и логических типов.
(Если бы я начал копать, я, вероятно, мог бы найти примеры. Чтобы найти примеры, поищите примеры в группе usenet comp.lang.fortran. kind
. Наиболее информированное обсуждение Фортрана происходит там, где некоторые высококвалифицированные люди вносят свой вклад.)
Итак, если вы не можете рассчитывать на конкретное значение типа, обеспечивающее одинаковое представление данных на разных платформах, что вы делаете? Вот для чего нужны встроенные функции SELECTED_REAL_KIND
и SELECTED_INT_KIND
. По сути, вы сообщаете функции, какие числа вам нужно представлять, и она возвращает то, что вам нужно использовать.
Я обычно использую эти виды, поскольку они обычно дают мне 4-байтовые и 8-байтовые вещественные числа:
!--! specific precisions, usually same as real and double precision
integer, parameter :: r6 = selected_real_kind(6)
integer, parameter :: r15 = selected_real_kind(15)
Таким образом, я мог бы впоследствии объявить переменную как:
real(kind=r15) :: xd
Обратите внимание, что это может вызвать проблемы, когда вы используете программы на разных языках, и вам необходимо точно указать количество байтов, занимаемых переменными. Если вам необходимо убедиться в этом, есть встроенные запросы, которые расскажут вам о каждом виде, из которого вы можете определить объем памяти, занимаемый переменной, ее точность, диапазон экспонент и т. Д. Или вы можете вернуться к нестандартному, но обычному стилю декларации real*4
, real*8
и т. Д.
Когда вы начинаете с новым компилятором, стоит взглянуть на значения определенного типа, чтобы вы знали, с чем имеете дело. Найдите в сети kindfinder.f90
удобную программу, которая расскажет вам о доступных для компилятора видах.