Fortran 90 логическое несоответствие
Я пытаюсь передать аргумент, объявленный просто как logical :: invar
к функции, где получающая переменная объявлена как
logical(x) :: invar
Сейчас x
определяется как
INTEGER, PARAMETER :: x = KIND(.TRUE.)
Что означает это определение x
имею в виду? Я сделал поиск kind(.true.)
но все результаты отмахиваются от этого аспекта. Был бы признателен за разъяснения для эксперта.
Я использую компилятор Intel, если это как-то связано с компилятором.
1 ответ
Переменные, такие как действительные числа, целые числа и даже логики, могут быть разными kind
s. Как правило, это важно, например, для проведения различий между реальными значениями одинарной и двойной точности. По моему опыту, нет причин возиться с kind
логично.
Кто бы ни написал этот код, очевидно, думает иначе. Когда вы объявляете логическое обычным способом, с
logical :: L1
переменная my_logical
имеет вид по умолчанию. Когда вы объявляете это с помощью
integer, parameter :: x = KIND(.TRUE.)
integer(x) :: L2
это имеет вид x
, который определяется как вид .true.
, Сложность в том, что .true.
почти наверняка также по умолчанию. (Стандарт требует, чтобы типом по умолчанию был вид .FALSE.
)
Итак, в приведенных выше примерах, L1
а также L2
одного и того же вида. Я не знаю, почему кто-то утруждает себя определением логического вида по умолчанию как x
, но вы не должны беспокоиться об этом.