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-ой позиции строки продолжения. Таким образом могут быть представлены очень длинные символьные константы.


 

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

79949. Теория обучения (Дидактика) 63 KB
  Обучение – часть педагогического процесса, взаимодействие педагогов и обучающихся с целью приобретения последними знаний, умений, навыков (ЗУН), развития познавательной и мотивационной сферы, воспитания характера.
79953. Судебная система Украины. Конституционный Суд Украины 130 KB
  Судебная система Украины Лекционное занятие к М. Конституционный Суд Украины Учебные вопросы. Конституционный Суд Украины как орган конституционной юрисдикции в Украине. Порядок формирования и структура Конституционного Суда Украины.
79954. Решения и выводы Конституционного Суда Украины 68.5 KB
  Решения и выводы Конституционного Суда Украины Конституционный Суд Украины за результатами рассмотрения на пленарных заседаниях дел относительно конституционности законов и других правовых актов а также относительно официального толкования Конституции и законов Украины принимает решения а по делам по другим вопросам – дает выводы. Временное отсутствие судьи на заседании пленарном заседании Конституционного Суда Украины на котором рассматривались материалы дела само дело не припятствует участия такого судьи с правом решающего голоса в...
79955. Органы прокуратуры Украины 159 KB
  Правоохранительные органы Украины Лекционное занятие к М. Органы прокуратуры Украины Учебные вопросы. Прокуратура Украины её место в системе органов государственной власти и задачи. Закон Украины О прокуратуре от 5 ноября 1991 года № 1789XII.
79956. Органы досудебного следствия Украины 93.5 KB
  Нередко факты совершения преступлений являются очевидными: причинение телесных повреждений, убийство, ограбления и др. Об этих фактах сообщают пострадавшие, их родственники, свидетели, работники медицинских учреждений и другие физические или юридические лица