Позвольте мне попытаться объяснить, и я надеюсь, что я рассмотрю все вопросы, которые вы поднимаете ...
У всех скаляров Фортрана есть kind
, который определяет диапазон и точность, которые принимают переменные такого рода.Все текущие компиляторы, с которыми я знаком, (обратите внимание, что последующие операторы не обязательно применяются ко всем прошлым или будущим компиляторам Фортрана) определяют как минимум 2 вида как для вещественных, так и для целочисленных переменных.Если вы хотите думать об этих видах как о разном количестве битов в представлении чисел, вы не ошибетесь, хотя стандарт Фортрана немного расплывчат в том, как именно должны быть представлены числа, оставляя большую часть деталей дляавторы компиляторов и концентрирующиеся на интерпретации программ.
Логические, символьные и комплексные переменные также бывают разных видов, но мы пока оставим их в стороне.
Внутренние процедуры selected_int_kind
и selected_real_kind
возвращает целочисленное значение, выражающее «код» конкретного компилятора для целого (действительного) такого рода.Многие компиляторы, хотя и не все, используют такие коды, как 4
и 8
для, соответственно, 32- и 64-битных целых чисел (вещественных чисел) - но не зацикливаются на соответствии, добрые «коды» произвольны ипо крайней мере, один текущий компилятор использует вместо них 2
и 3
.Используя подпрограммы selected_n_kind
, ваш код не зависит от платформы, вы никогда не используете эти коды явно.
Мне кажется странным использовать precision
с реальным аргументом, как вы это делали ввызовы selected_int_kind
, чаще я ожидал увидеть целочисленные литеральные аргументы.Вызов, такой как selected_int_kind(n)
, возвращает код вида для целых чисел с диапазоном -10^n .. 10^n
или -1, если такого целого числа нет.
Как это бывает, и вам повезло, большинство современных компиляторов используютКоды одного и того же типа для целых чисел и вещественных чисел с одинаковым количеством битов, так что вы можете использовать selected_int_kind
для получения кодов для обоих, это не обязательно верно, и лучший способ получить реальные виды будет использовать selected_real_kind
.
В эти дни вы также можете использовать некоторые заранее определенные константы.Внутренний модуль iso_fortran_env
объявляет такие константы, как real32
и int64
, которые задают коды вида, и вы можете просто use
их.Если из-за этого вы немного почесываете голову, посмотрите некоторые вопросы и ответы здесь на SO, которые уже охватывают этот вопрос.
Я не уверен, что полностью понимаю вопрос, подразумеваемый в вашем предложении все ... .Как я писал выше, большинство современных компиляторов используют одинаковые коды типов для вещественных чисел и целых чисел.Лучше не думать о целых числах, имеющих точность, все целые числа являются абсолютно точными эквивалентами «действительным» целым числам, целочисленные переменные имеют ограниченный диапазон.Вещественные числа, с другой стороны, имеют точность, большинство компиляторов Фортрана в настоящее время следуют IEEE754 для спецификации точности и диапазона для действительных значений.
Second ... - вы заявилиb
и d
имеют тип real
, разумеется, они имеют действительные значения.
Третий ... - sNan
является целым числом по объявлению.Термин Z"7FC0000"
- это способ, которым Fortran использует шестнадцатеричные цифры для установки значения целого числа.(Вы также можете использовать b
в качестве префикса для строки двоичных цифр, o
для восьмеричного.) Я ожидаю, хотя я не проверял, что 133955584
является десятичным эквивалентом.
Наконец, вы не указали значения ни для одной из переменных, поэтому процессор интерпретирует найденные в памяти биты как переменную указанного типа и записывает их.