72633

Типы данных в МS-Фортране

Доклад

Информатика, кибернетика и программирование

На многих микропроцессорах команды, необходимые для выполнения 16-битовой арифметики, значительно быстрее и короче соответствующих команд для выполнения 32-битовой арифметики. Поэтому, пока Вы не используете метакоманду МS-Фортрана...

Русский

2014-09-14

23.89 KB

0 чел.

Типы данных

В МS-Фортране существует шесть основных типов данных:

1. Целый (INTEGER*2 INTEGER*4) 
2. Действительный (REAL*4 или REAL) 
3. Двойной
 точности (REAL*8 или DOUBLE PRECISION) 
4.
Комплексный (COMPLEX*8 и COMPLEX*16) 
5.
Логический (LOGICAL*2 и LOGICAL*4) 
6. Символьный 

Свойства, состав и форма представления констант каждого типа описаны на следующих страницах; требования по памяти приведены в таблице 2-2.

Тип

Число байтов

LOGICAL

2 или 4

LOGICAL*2

2

LOGICAL*4

4

INTEGER

2 или 4

INTEGER*2

2

INTEGER*4

4

SHARACTER

1

SHARACTER*n

n

REAL

4

REAL*4

4

REAL*8

8

DOUBLE PRECISION

8

COMPLEX

8

COMPLEX*8

8

COMPLEX*16

16

Таб.2-2. Требования по памяти.

Примечание к таблице 2-2: 
1. Может использоваться 2 или 4 байта. По умолчанию - 4, но мета - командой $STORAGE может быть установлено 2 или 4. 
2. CHARACTER и CHARACTER*1 - синонимы. 
3. Максимальное n равно 127. 
4. REAL и REAL*4 - синонимы. 
5. REAL*8 и DOUBLE PRECISION - синонимы
6. COMPLEX
и COMPLEX*8 - синонимы.

Замечания:

На многих микропроцессорах команды, необходимые для выполнения 16-битовой арифметики, значительно быстрее и короче соответствующих команд для выполнения 32-битовой арифметики. Поэтому, пока Вы не используете метакоманду МS-Фортрана $STORAGE, устанавливающую 2, в программе по умолчанию будет 32-битовая арифметика и она будет выполняться существенно медленней, чем ожидается. (Смотрите часть 6). Установка 2 метакомандой $STORAGE ускорит выполнение программы и сделает ее короче.

Вы можете использовать внутреннюю функцию INT2 для указанию компилятору использовать в выраженных 16-битовую арифметику.

3.1. Целые типы данных

Целый тип данных состоит из подмножества целых чисел. Целая величина - это точное представление соответствующего целого. Целая величина занимает 2 или 4 байта, в зависимости от установки метакоманды $STORAGE. 2-байтовое целое, INTEGER*2, может содержать величину в диапазоне от -32767 до 32767. 4-байтовое целое, INTEGER*4, может содержать величину в диапазоне от -2147483647 до 2147463647.

Целые константы содержат последовательность одной или более десятичных цифр или определитель системы счисления, за которым следует строка цифр в диапазоне от 0...(основание системы счисления - 1), где величины от 10 до 35 представлены буквами от А до Z соответственно. Указатель системы счисления содержит символ "#", которому обычно предшествует строка десятичных цифр, представляющая величину основания системы счисления. Если строка отсутствует, подразумевается, что основание равно 16. Если указатель системы счисления отсутствует, подразумевается, что основание равно 10.

Любому формату может предшествовать произвольный арифметический знак плюс (+) или минус (-). Целые константы не должны выходить из диапазона. Десятичная точка недопустима в целой константе.

Замечание: диапазон величин как для 16-битовых так и для 32-битовых целых не включает наиболее отрицательное число, которое может быть представлено в двоичном дополнительном коде этим числом битов. Эти числа, 16#8000 и 16#80000000 обрабатываются как "неопределенные" для сигнализации об ошибке.

Хотя максимальная величина 32-битового целого определена как 2**31-1, при компиляции и счете будут считываться и большие величины, которые выходят за диапазон 2**32. Но эти величины будут только считываться без ошибки, если их основание счисления не равно 10. Они будут интегрироваться как отрицательные числа с соответствующим внутренним представлением. Например, 16#FFFFFFFF приведет к тому что все биты 32-битового числа будут единицы, что соответствует арифметической величине -1.

Примеры целых констант:

                  123           +123               0

             00000123          32767          -32767

               -#AB05       2#010111       -36#ABZ07

В МS-Фортране точность целых определяется следующим образом:

*Константы.

Точность устанавливает метакоманда $STORAGE.

*Результат выражения.

Точность результата определяется точностью максимального операнда и величиной установленной метакомандой $STORAGE.

*Формальные параметры.

Если точность неизвестна, предлагается, что она такая же как у фактического параметра. Если тип известен, он должен точно соответствовать фактическому параметру (до тех пор пока параметр не передается величиной, использующей атрибут VALUE, описанный в части 7).

*Целые переменные и функции.

Точность задана для каждой переменной или функции (по умолчанию установлена метакомандой $STORAGE).

3.2. Тип действительных данных обычной точности IEEE.

Тип действительных данных (REAL или REAL*4) содержит подмножество действительных чисел обычной точности. Действительная величина обычной точности - это приближение требуемого действительного числа, занимающее 4 байта памяти. Диапазон действительных чисел обычной точности приблизительно следующий:

от 8.43Е-37 до 3.37Е+38 (положительные числа)
от -3.37Е+38 до -8.43Е-37 (отрицательные числа)
0 (нуль)

Точность - больше шести десятичных цифр и меньше семи. Основная действительная константа содержит:

1. Необязательный знак. 
2. Целую часть. 
3. Десятичную точку. 
4. Дробную часть. 
5. Необязательный показатель экспоненты.

Целая и дробная части содержат по одной или больше десятичных цифр, а точка является разделителем (.). Как целая часть, так и дробная могут отсутствовать, но не обе. Некоторые простые целые константы:

   -123.456              +123.456           123.456

        -123.                 +123.              123.

        -.456                 +.456              .456

Экспоненциальная часть содержит букву "Е", за которой следует (необязательно) целая константа со знаком из одной или двух цифр.

Экспонента показывает, что предшествующую величину нужно умножить на десять в степени целая константа. Некоторые простые экспоненциальные части:

         Е12          Е-12             Е+12      Е0

Действительная константа - это либо основная действительная константа, либо основная действительная константа с экспоненциальной частью, либо целая константа с экспоненциальной частью. Например:

          +1.000Е-2         1.Е-2          1Е-2

          +0.01           100.0Е-4        0.0001Е+2


Все это - одно и то же число, одна сотая.

3.3. Действительный тип данных IEEE двойной точности

Действительный тип данных двойной точности (REAL*8 или DOUBLE PRECISION) содержит подмножество действительных чисел двойной точности. Это подмножество больше, чем подмножество типа данных REAL(REAL*4).

Действительная величина двойной точности - это, обычно приближение требуемого действительного числа. Действительная величина двойной точности может быть положительной, отрицательной или нулем и занимает восемь байтов памяти. Диапазон действительных величин двойной точности приблизительно следующий:

    от  4.19D-307  до  1.67D+308 (положительные числа)

    от -1.67D+308  до -4.19D-307 (отрицательные числа)

                         0       (нуль)

Точность больше чем 15 десятичных цифр. Константа двойной точности содержит:

1. Необязательный знак. 
2. Целую часть. 
3. Десятичную точку. 
4. Дробную часть. 
5. Обязательную экспоненциальную часть.

В экспоненте используется "D" а не "Е" для отличия от обычной точности. Целая и дробная части содержат одну или более десятичных цифр, а десятичная точка является разделителем. Целая часть или дробная, но не обе, могут отсутствовать.

Константа двойной точности - это либо основная действительная константа, за которой следует экспоненциальная часть, либо целая константа, за которой следует экспоненциальная часть. Например:

    +1.123456789D-2         1.D-2           1D-2

    +0.000000001D0       100.0000005D-4   .00012345D+2

Экспоненциальная часть содержит букву "D", за которой следует целая константа. Целая константа может иметь необязательный знак. Экспонента показывает, что предшествующее число должно быть умножено на десять в степени целый показатель экспоненты. Некоторые простые экспоненты:

             D12    /D-12      D+12      /D0

3.4. Формат десятичных чисел с плавающей точкой обычной и двойной точности

Десятичные числа с плавающей точкой содержат байт с битом знака и семибитовой экспонентой в 64-ричной системе счисления, за которым следует мантисса из 6 (для обычной точности) или из 14 (для двойной точности) двоично-десятичных цифр, упакованных по 2 в байт (если байт экспоненты нулей - число равно нулю). Запись десятичных констант с плавающей точкой производится в том же формате, что и для стандартных действительных констант Фортрана обычной и двойной точности. Допустимый диапазон чисел обычной точности следующий:

      от +1.0Е-64 до +9.99Е+62 (положительные числа)

      от -9.99+62 до -1.0Е-64  (отрицательные числа)

            0                  (нуль)

Точность равна точно 6 цифрам. 
Допустимый диапазон чисел двойной точности следующий:

      от +1.0D-64  до +9.999D+62 (положительные числа)

      от -9.99D+62 до -1.0D-64   (отрицательные числа)

             0                   (нуль)

Точность равна точно 14 цифрам.

Метакоманда $DECMATH вызывает представление констант текстового файла в виде с плавающей запятой.

3.5. Комплексные типы данных

Тип данных COMPLEX*8 задает пару действительных чисел обычной точности, второе из которых представляет мнимую часть. Число COMPLEX*8 занимает 8 байтов памяти.

Комплексная константа состоит из необязательного знака, левой скобки, двух целых или действительный чисел, разделенных запятой, и правой скобки. Элемент данных COMPLEX*16 содержит упорядоченную пару действительных чисел двойной точности. Элемент данных COMPLEX*16 занимает 16 байтов памяти. Каждая компонента (действительная и мнимая) COMPLEX*8 - это REAL*4. Каждая компонента COMPLEX*16 - это REAL*8.

3.6. Логические типы данных

Логический тип данных содержит две логических величины .TRUE. и .FALSE. Логическая переменная занимает два или четыре байта памяти в зависимости от установки метакоманды $STORAGE. По умолчанию это 4 байта. Значение логической переменной независит от метакоманды $STORAGE, которая соответствует требованию ANSI, чтобы логические, целые и действительные переменные обычной точности занимали одинаковое место в памяти. Величины LOGICAL*2 занимают два байта. Младший значащий (первый) байт - либо 0(.FALSE.), либо 1(.TRUE.); старший значащий байт не определен.

Переменные LOGICAL*4 занимают два слова, младшее значащее (первое) из которых содержит величину LOGICAL*2. Старшее значащее слово не определено.

3.7. Символьный тип данных

Символьный тип данных содержит последовательность символов ASCII. Длина символьной величины равно числу символов в последовательности. Длина заданной константы или переменой фиксирована и должна составлять от 1 до 127 символов. Символьная переменная занимает один байт памяти для каждого символа в последовательности. Предполагается, что символьная переменная занимает цепочку байтов без учета границ слов. Однако компилятор предполагает, что несимвольные переменные, следующие за символьными, начинаются с границы слова.

Символьная константа содержит последовательность из одного или более символов, заключенных в пару одиночных кавычек. В символьной константе символы пробелов допустимы и значимы. Регистры буквенных символов значимы. Одиночная кавычка в символьной константе представляется двумя одиночными кавычками без пробелов между ними.

Длина символьной константы равна числу символов между одиночными кавычками. Пара одиночных кавычек означает один символ. Несколько примеров символьных констант:

                  'A'

                  ' '

                  'Help!'

                  'A very long CHARACTER constant'

                  'O''Brien'

                  ''''      

Последний пример - это символьная константа содержащая один апостроф (одиночную кавычку).

Символьной переменной может быть присвоена несимвольная величина, если присвоение не включено в выражение. Допустимо следующее:

                    REAL R

                    CHARACTER*5 C

                    C=R,

но следующее недопустимо

                    REAL R

                    CHARACTER*5 C

                    C=R+1.0

Фортран допускает строки исходного текста длиной до 72 позиций. Короткие строки дополняются пробелами до 72 позиции. Когда символьная константа переходит через границу строки, ее величина такова, как если бы часть строки продолжения, начиная с 7-ой позиции, добавить к 72-й позиции начальной строки. Поэтому следующий текст Фортрана

                200  СН='ABC

                   X DEF'

Эквивалентен:

                200  CH='ABC(58 пробелов)...DEF'

С 58-ю пробелами между С и Д, равными пространству от С в 15-й позиции до 72-й позиции плюс одному пробелу в 7-ой позиции строки продолжения. Таким образом могут быть представлены очень длинные символьные константы.


 

А также другие работы, которые могут Вас заинтересовать

25114. Способы описания алгоритм 36 KB
  Табличный служит для представления алгоритма в форме таблицы и расчётных формул. С другой строны в псевдокоде используются некоторые формальные конструкции и математическая символика что приближает запись алгоритма к общепринятой математической записи. В псевдокоде не приняты строгие синтаксические правила для записи команд присущие формальным языкам что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд рассчитанный на абстрактного исполнителя.
25115. Изображение алгоритма с помощью блок-схемы 53.5 KB
  Изображение алгоритма с помощью блоксхемы. При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков каждый из которых соответствует выполнению одного или нескольких действий. Блоки соединены стрелками указывающими направление выполнения команд.
25116. Основные алгоритмические конструкции 48.5 KB
  Обеспечивает многократное выполнение некоторой совокупности действий которая называется телом цикла. Предписывает выполнять тело цикла до тех пор пока выполняется условие записанное после слова пока. Предписывает выполнять тело цикла для всех значений некоторой переменной параметра цикла в заданном диапазоне. Предписывает выполнять тело цикла до тех пор пока не выполнится условие записанное после тела цикла.
25117. Линейный алгоритм 29.5 KB
  Конструкция в которой алгоритмические шаги выполняются в той же последовательности как они записаны то это конструкция следования линейный алгоритм.
25118. Ветвление 35 KB
  Если условие соблюдается то выполняются действия расположенные в ветви под названием Да . В случае несоблюдения условия будут выполнены действия расположенные в ветви Нет . Неполная форма ветвления отличается от полной тем что в одной из ветвей действия отсутствуют . В таком алгоритме в соответствии с условием либо будут выполнены действия имеющиеся в ветви либо начнут сразу выполняться действия расположенные после ветвления.
25119. Циклы 39.5 KB
  Всякий цикл состоит из: заголовка инициализация цикла тела цикла к телу относят все шаги которые повторяются конец цикла. В цикле Пока конструкция состоит из проверки условия и выполнении тела цикла если условие истинно. В цикле До конструкция состоит из выполнении тела цикла проверки условия и повторного выполнения тела цикла если условие ложно. В теле цикла происходят события которые влияют на истинность условия цикла.
25120. Понятие вспомогательного алгоритма 32.5 KB
  Иногда имеет смысл выделить повторяющиеся последовательности команд в самостоятельный блок вынеся его за пределы алгоритма и в нужном месте организовать вызов этого блока указав соответствующий набор параметров. Такой блок реализующий некоторый вполне законченный этап обработки информации называется вспомогательным алгоритмом и может быть вызван из любого места основного алгоритма сколько угодно раз. Заголовок вспомогательного алгоритма имеет вид: имя вспомогательного алгоритма список формальных параметров .
25121. Понятие о формальных языках. Алгоритмический язык 26 KB
  Алгоритмический язык. ЯЗЫК ФОРМАЛЬНЫЙ 1 совокупность исходных принятых за неделимые знаков и правил построения из них слов и словосочетаний; 2 искусственный язык позволяющий заменить операции с объектами операциями с соответствующими им знаками. Буква или символ это простой неделимый знак совокупность которых образует алфавит языка.
25122. Структура алгоритмических языков 34 KB
  Алфавиты алгоритмических языков состоят обычно из следующих наборов: букв латинского алфавита и алфавита национального языка; цифр от 1 до 9; знаков операций: арифметических логических отношения специальных знаков. в элементарные конструкции языка рассматриваемые в данном тексте как неделимые символы. Словарный состав языка т.