COBOL Типы данных
У меня есть путаница в отношении типов данных COBOL.
Как и во многих интервью, предлагается объяснить разницу между COMP-3 и COMP...
Какая разница?
каково значение режимов использования в COBOL и как это связано с типами данных?
Спасибо и с уважением,
Манаси Кулкарни
Ответы
Ответ 1
USAGE
в COBOL описывает, как элемент данных должен использоваться. Несколько примеров
ИСПОЛЬЗОВАНИЯ:
- DISPLAY. Это идентифицирует элемент, который может быть напечатан на терминале или
отчет. Это может быть или не быть числом (например, может быть текстовым значением).
описание элемента DISPLAY задается предложением PICture. Например:
PIC 9(5) USAGE DISPLAY
описывает пятизначное число, которое может быть отображено (напечатано).
Часто USAGE DISPLAY
отключается, поскольку подразумевается, если отсутствует.
- INDEX. Это идентифицирует элемент, используемый как индекс в таблице (OCCURS).
- COMPsomething указывает, что элемент данных должен использоваться в
арифметические операции (т.е. некоторые числа).
Существуют различные типы числового элемента. Два из наиболее часто используемых
числовые типы данных:
- COMPUTATION или COMP. Это эквивалентно BINARY
- COMPUTATION-3 или COMP-3. Это эквивалентно PACKED-DECIMAL
Элементы данных COMP (BINARY), как правило, являются наиболее эффективным способом выполнения
расчеты по элементам данных, которые представляют собой целочисленные значения.
Элементы данных COMP-3 (PACKED-DECIMAL) используются в COBOL, потому что
они сохраняют фиксированное число десятичных точек. Все вычисления
приводят к результату с заданным числом десятичных точек.
Это особенно полезно для операций типа учета.
Числа с плавающей запятой составляют число цифр после
десятичная точка (например, десятичная точка может "плавать" ), которая равна
а не способ представления финансовых операций.
Вы можете найти полный список COMPUTATION для IBM Enterprise COBOL
здесь
Одна из проблем, с которыми сталкиваются многие программисты, начиная с COBOL, - это
понимая, что элемент COMP отлично подходит для математики, но не может быть
отображается (печатается) до тех пор, пока он не будет преобразован в элемент DISPLAYable через
оператор MOVE. Если вы переместите элемент COMP в отчет или на
экран не будет очень хорошо представлен. Его нужно переместить в ДИСПЛЕЙ
сначала.
Другая вещь, которую вы можете исследовать немного больше, - это
отношения между PICture и ИСПОЛЬЗОВАНИЕМ при определении переменных
в COBOL. Вот ссылка на очень хороший вводный Учебник COBOL
из Университета Лимерика.
Ответ 2
COBOL действительно имеет только два типа данных: числа и строки.
Макет каждого поля в записи COBOL точно определяется предложением PICTURE
(обычно сокращенным PIC
). Наиболее распространенными являются:
-
PIC X
для строк. PIC X(100)
означает 100-байтовую строку.
-
PIC 9
для чисел, необязательно с S
(знак) или V
(неявная десятичная точка). Например, PIC S9(7)V99
означает подписанное число с 7 цифрами слева от неявной десятичной точки и 2 цифры справа.
Числовые поля могут иметь предложение USAGE
для оптимизации их хранения. Наиболее распространенными USAGE
являются DISPLAY
, COMP
и COMP-3
.
DISPLAY
хранит каждую цифру в качестве символа. Например, PIC 9(4) VALUE 123
хранит номер, как если бы это была строка "0123". И PIC 9(4)V99 VALUE 123.45
сохраняет его как "012345". Обратите внимание, что десятичная точка фактически не сохраняется.
Это неэффективный формат, поскольку для каждой цифры требуется 8 бит. Но у него есть "оптимизация" для подписанных номеров, используя половину последнего байта для сохранения знака. Обычно цифры EBCDIC имеют высокий уровень шума F, поэтому 0123 - F0 F1 F2 F3. Но -0123 - F0 F1 F2 D3; D указывает на отрицательный. C означает положительный, а F означает беззнаковое (то есть положительное). (Подобные форматы используются в версиях ASCII COBOL, но не как стандартизованные.)
COMP-3
является двоично-кодированным десятичным символом с завершающим знаком nybble. PIC 9(3) COMP-3 VALUE 123
становится двумя байтами 12 3F.
COMP
или BINARY
- это родной двоичный формат, как и short
, int
или long
в C.
Ответ 3
Как следует из другого ответа, COMP означает двоичный файл с большим двоичным кодом. COMP-3 упакован десятичным - это означает, что одна десятичная цифра отображается на каждый полубайт.
Я не уверен, что предыдущий ответ получил проблему вокруг точности.
PIC S9 (9) V9 (9) COMP
а также
PIC S9 (9) V9 (9) COMP-3
Иметь точно такую же точность. Это часть стандарта ANSI85. Задача компилятора и среды выполнения заключается в обеспечении того, чтобы двоичное представление в COMP содержало соответствующие преобразования, чтобы обеспечить точно такие же результаты, как и при отображении использования или COMP-3.
Компьютеры мэйнфреймов IBM имеют упакованные десятичные вычисления в аппаратном обеспечении. Это очень полезно, потому что преобразование десятичной в двоичную шкалу с n квадратом n является длиной числа. Это означает, что COMP-3 каждый раз является самым быстрым форматом мэйнфрейма, но с меньшей вероятностью находится в распределенных системах. Однако это снова не всегда так. Например, решение COOBOL на основе Micro Focus будет быстрее работать на COMP-3, чем COMP-5, для очень большой десятичной точности ( > 18 цифр), но наоборот. Управляемая система COBOL от Micro Focus почти всегда быстрее всего работает на COMP (на самом деле COMP-5 является лучшим, что аналогично COMP, но будет иметь аппаратный endian, а не использовать макет памяти большого числа).
Наконец, я предлагаю, что для промежуточных значений и общей математики более новые определения данных двоично-длинного и двоичного-двойных являются лучшим выбором, потому что тогда компилятор может принимать решения о том, как хранить и оптимизировать для вас.
Подробнее о COBOL на распределенном и управляемом COBOL проверьте этот кнол: http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4, а также не стесняйтесь искать cobol на facebook:)
Ответ 4
Что касается определения того, какой тип данных использовать, его можно сделать очень сложным - НО - простой набор рекомендаций:
DISPLAY и Edited Zone Decimal следует использовать только для отображения цифр в отчете или sysout. Переместите поля COMP и COMP-3 в поле DISPLAY/Edited перед тем, как поместить его в отчет или в sysout.
COMP - имеет самую быструю скорость вычисления для целых
COMP-3 (PACKED Decimal) - следует использовать, когда поддерживаются десятичные позиции.
Поля COMP и COMP-3 могут использоваться вместе в расчетах. Компилятор определит, какой тип поля будет преобразован (под обложками) в один общий тип числовых данных - на основе правил.
Ответ 5
Форум мэйнфреймов - это всеобъемлющее хранилище учебника по мэйнфреймам для COBOL, DB2, CICS, JCL, VSAM, CA7, TWS. Проверьте ссылку ниже на учебники, касающиеся типов данных COBOL.
Благодарю.