Fortran 90 логическое несоответствие

Я пытаюсь передать аргумент, объявленный просто как logical :: invarк функции, где получающая переменная объявлена ​​как

logical(x) :: invar

Сейчас x определяется как

INTEGER, PARAMETER :: x = KIND(.TRUE.)

Что означает это определение x имею в виду? Я сделал поиск kind(.true.) но все результаты отмахиваются от этого аспекта. Был бы признателен за разъяснения для эксперта.

Я использую компилятор Intel, если это как-то связано с компилятором.

1 ответ

Решение

Переменные, такие как действительные числа, целые числа и даже логики, могут быть разными kinds. Как правило, это важно, например, для проведения различий между реальными значениями одинарной и двойной точности. По моему опыту, нет причин возиться с kind логично.

Кто бы ни написал этот код, очевидно, думает иначе. Когда вы объявляете логическое обычным способом, с

logical :: L1

переменная my_logical имеет вид по умолчанию. Когда вы объявляете это с помощью

integer, parameter :: x = KIND(.TRUE.)
integer(x) :: L2

это имеет вид x, который определяется как вид .true., Сложность в том, что .true. почти наверняка также по умолчанию. (Стандарт требует, чтобы типом по умолчанию был вид .FALSE.)

Итак, в приведенных выше примерах, L1 а также L2 одного и того же вида. Я не знаю, почему кто-то утруждает себя определением логического вида по умолчанию как x, но вы не должны беспокоиться об этом.

Другие вопросы по тегам