Фортран: integer*4 по сравнению с целым числом (4) по сравнению с целым числом (kind=4)

Я пытаюсь изучить Фортран, и я вижу много различных раздаваемых определений, и я задаюсь вопросом, пытаются ли они выполнить то же самое. Каково различие между следующим?

  • integer*4
  • integer(4)
  • integer(kind=4)
54
задан Ziezi 31 March 2017 в 22:41
поделиться

1 ответ

В Fortran >=90 лучшим подходом является использование внутренних функций для указания необходимой вам точности - это гарантирует как переносимость, так и то, что вы получите ту точность, которая вам нужна. Например, чтобы получить целые числа i и my_int, которые будут поддерживать по крайней мере 8 десятичных цифр, вы можете использовать:

integer, parameter :: RegInt_K = selected_int_kind (8)
integer (kind=RegInt_K) :: i, my_int

Определив RegInt_K (или любое другое выбранное вами имя) как параметр, вы можете использовать его во всем коде как символ. Это также упрощает изменение точности.

Запрашивая 8 или 9 десятичных цифр, вы обычно получаете 4-байтовое целое число.

integer*4 - распространенное расширение, восходящее к старому FORTRAN, для указания 4-байтового целого числа. Хотя этот синтаксис не является и никогда не был стандартным для Фортрана.

integer (4) или integer (RegInt_K) - это сокращение от integer (kind=4) или integer (kind=RegInt_K). integer (4) не то же самое, что integer*4 и является непортативным - стандарт языка не определяет числовые значения видов. Большинство компиляторов используют kind=4 для 4-байтовых целых чисел -- для этих компиляторов integer*4 и integer(4) обеспечат тот же целочисленный тип -- но есть исключения, поэтому integer(4) является непортативным и его лучше избегать.

Подход для reals аналогичен.

UPDATE: если вы не хотите указывать числовые типы по требуемой точности, но вместо этого по объему памяти, которую они будут использовать, Fortran 2008 предоставляет такой метод. Величины и целые числа могут быть указаны по количеству бит памяти после использования модуля ISO_FORTRAN_ENV, например, для целого числа размером 4 байта (32 бита):

use ISO_FORTRAN_ENV
integer (int32) :: MyInt

В руководстве gfortran есть документация по "внутренним модулям".

59
ответ дан 7 November 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: