subtype SMAL_IINT is INTEGER range
type PAGE_NUM is range 1 .. 2_000; type LINE_SIZE is range 1 .. MAX_LINE_SIZE; subtype SMAL_IINT is INTEGER range -10 .. 10; subtype COLUMN_PTR is LINESIZE range 1 .. 10: subtype BUFFER_SIZE is INTEGER range 0 .. МАХ;
. Имя в описании целого типа — это имя подтипа. С другой стороны, предопределенные операции над целым типом определяют результат, который принадлежит диапазону, определяемому родительским предопределенным типом; такой результат не обязательно принадлежит описанному подтипу, и попытка присвоить такой результат переменной целого подтипа возбуждает исключение CONSTRAINT_ERROR. Наименьшее (наибольшее по модулю отрицательное) значение, поддержанное реализацией для предопределенных целых типов, есть именованное число SYSTEM.MIN_INT, а наибольшее (из положительных) значение — SYSTEM.MAX_INT (см. 13.7).
Ссылки: анонимный тип 1, граница диапазона 3.5, идентификатор 2.3, исключение CONSTRAINT_ERROR 11.1, исключение NUMERIC-ERROR 11.1, литерал 4.2, ограничение диапазона 3.5, описание подтипа 2, описание типа 1, определение типа 1, предопределенная операция 4.5, предопределенный пакет системы 13.7, преобразование 4.6, принадлежит подтипу 3.3, родительский тип 3.4, статическое выражение 4.9, тип 3.3, универсальный тип 4.10, целый литерал
5. ОПЕРАЦИИ НАД ДИСКРЕТНЫМИ ТИПАМИ
Базовые операции над дискретными типами включают присваивание, проверку на принадлежность и квалификацию; для логических типов — управление с промежуточной проверкой;для целого типа — явное преобразование значений других числовых типов к целому типу и неявное преобразование значения типа универсальный-целый к значению заданного типа.
Для каждого дискретного типа или подтипа Т базовые операции включают перечисленные ниже атрибуты. В этом перечислении Т ссылается на подтип (подтип Т) для любого свойства, зависящего от ограничений для Т; другие свойства установлены в терминах базового типа Т.
Первая группа атрибутов вырабатывает характеристики подтипа Т. Эта группа включает атрибут ВАЗЕ (см. 3), атрибуты FIRST и LAST (см. 3.5), атрибут представления SIZE (см. 2) и атрибут WIDTH, определенный следующим образом:
T'WIDTH | Вырабатывает максимальную длину образа по всем значениям подтипа Т {образ — это последовательность символов, вырабатываемая атрибутом IMAGE, см. ниже). Вырабатывает нуль для пустого диапазона. Значения этого атрибута имеют тип универсальный-целый. |
Т'РОS | Параметр Х должен быть значением базового типа Т. Тип результата — универсальный-целый. Результат — номер позиции для значения параметра. |
T'VAL | Параметр Х может быть любого целого типа. Тип результата — базовый тип Т. По заданному значению Х — номеру позиции — функция вырабатывает значение в этой позиции. Если соответствующее Х — универсальное-целое значение — не принадлежит диапазону T'POS(T'BASE'FIRST). .T'POS(T'BASE'LAST), то возбуждается исключение CONSTRAINT_ERROR. |
T'SUCC | Параметр X должен быть значением базового типа Т. Тип результата — базовый тип Т. Результат — значение с номером позиции, на единицу большим номера позиции для значения X. Если Х равен T'BASE'LAST, то возбуждается исключениеCONSTRAINT_ERROR. |
T'PRED | Параметр Х должен быть значением базового типа Т. Тип результата — базовый тип Т. Результат — значение с номером позиции, на единицу меньшим номера позиции для значения X. Если Х равно T'BASE'FIRST, то возбуждается исключение CONSTRAINT - ERROR. |
T'IMAGE | Параметр Х должен быть значением базового типа Т. Тип результата — предопределенный тип STRING. Результат — образ значения X, т.е. последовательность символов, представляющих изображение значения. Образу целого значения соответствует десятичный литерал без подчеркиваний, предшествующих нулей, порядка и пробелов справа, но с одним символом минус или пробелом слева. Нижняя граница образа есть единица. Образ литерала перечисления — это либо соответствующий идентификатор из прописных букв, либо соответствующий символьный литерал (включая два апострофа); пробелы не включаются ни слева, ни справа. Образ символа С, отличного от графического символа, зависит от реализации; должно выполняться равенство СНАRАСТЕR'VАLUЕ(СНАRАСТЕR'IМАGЕ(С))=С. |
T'VALUE | Параметр Х должен быть значением предопределенного типа STRING. Тип результата — базовый тип Т. Игнорируются любые пробелы слева и справа от последовательности символов, соответствующих параметру. Если для перечислимого типа последовательность символов имеет синтаксис литерала перечисления и если этот литерал существует для базового типа Т, то результат — соответствующее значение перечислимого типа. Если для целого типа последовательность символов имеет синтаксис целого литерала с возможным знаком минус или плюс слева и если существует соответствующее значение базового типа Т, то результат есть это значение. Во всех остальных случаях возбуждается исключение CONSTRAINT_ERROR. |
Кроме того, для объекта А дискретного типа определены атрибуты A'SIZE и A'ADDRESS(см. 2).
Кроме базовых операции над дискретными типами включают предопределенные операции отношения. Для перечислимых типов операции включают литералы перечисления. Для логических типов операции включают предопределенную унарную логическую операцию отрицания not и предопределенные логические операции. Для целых типов операции включают предопределенные арифметические операции: унарные и бинарные аддитивные операции - и +, все мультипликативные операции, унарную операцию abs и операцию возведения встепень.
Операции над подтипом — это операции над его базовым типом, кроме следующих: присваивания, проверки принадлежности, квалификации, явного преобразования типа и атрибутов первой группы; результат каждой из этих операций зависит от подтипа (присваивание, проверка принадлежности, квалификация и преобразование включают проверку подтипа; атрибуты первой группы вырабатывают характеристику подтипа).
. Для подтипа дискретного типа переданные атрибутами SUCC, PRED, VAL и VALUE результаты не обязательно принадлежат подтипу; аналогично фактические параметры атрибутов POS, SUCC, PRED и IMAGE не обязаны принадлежать подтипу. Эти атрибуты удовлетворяют (при отсутствии исключения) следующим соотношениям:
T'POS(T'SUCC(X)) = T'POSfX) + 1 T'POS(T'PRED(X)) = T'POS(X) - 1T'VAL(T'POS(X)) = X T'POS(T'VAL(N)) = NПримеры: -- для типов и подтипов, описанных в 1-- COLOR'FIRST = WHITE, COLOR'LAST = BLACK -- RAINBOW'FIRST = RED, RAINBOW'LAST = BLUE-- COLOR'SUCC(BLUE) = RAINBOW'SUCC(BLUE) = BROWN -- COLOR'POS(BLUE) = RAINBOW'POS(BLUE) = 4 -- COLOR'VAL(O) = RAINBOW'VAL(O) = WHITE
Ссылки: атрибут 4, базовая операция 3, базовый тип 3.3, бинарная аддитивная операция 4.5, 3, граница диапазона 3.5, графический символ 2.1, дискретный тип 3.5, идентификатор 2.3, исключение CONSTRAINT_ERROR 11.1, квалифицированное выражение 4.7, литерал перечисления 1, логическая операция 4.5, 1, логический тип 3, мультипликативная операция 4.5, 5, номер позиции 3.5, объект 3.2, ограничение 3.3, операция 3.3, операция возведения в степень 4.5, 6, операция отношения 4.5, 2, операция отрицания 4.5, 6, операция управления с промежуточной проверкой 4.5, 1, подтип 3.3, предопределенная операция 4.5, предопределенный тип С, преобразование 4.6, присваивание 5.2, проверка принадлежности 4.5, 2, символьный литерал 2.5, строковый тип 3, тип 3.3, тип универсальный целый 4, унарная аддитивная операция 4.5, 4, универсальный тип 4.10, функция 6.5, целый тип 4, числовой литерал 2.4, числовой тип
6. ВЕЩЕСТВЕННЫЕ ТИПЫ
Вещественные типы обеспечивают приближение вещественных чисел с относительной погрешностью для плавающих типов и с абсолютной погрешностью для фиксированных типов.
определение-вещественного-типа :: =
ограничение - плавающего - типа [ограничение - фиксированного - типа
С каждым вещественным типом связан набор чисел, называемых модельными числами. Границы ошибок в предопределенных операциях даны в терминах модельных чисел. Реализация типа должна включать по крайней мере эти модельные числа и представлять их точно.
С каждым вещественным типом связан зависящий от реализации набор чисел, называемых хранимыми числами. Набор хранимых чисел вещественного типа должен включать по крайней мере набор модельных чисел типа. Допустимо, чтобы диапазон хранимых чисел был больше диапазона модельных чисел, но границы ошибок предопределенных операций над хранимыми числами определены теми же правилами, что и для модельных чисел. Хранимые числа по этой причине обеспечивают гарантированные границы ошибок для операций над зависящим от реализации диапазоном чисел; напротив, диапазон модельных чисел зависит только от определения вещественного типа и поэтому не зависит от реализации.
Вещественные литералы — это литералы анонимного предопределенного вещественного типа, называемого в этом руководстве универсальным-вещественным. Другие вещественные типы не имеют литералов. Для каждого вещественного типа существует неявное преобразование, которое преобразует универсальное-вещественное значение в значение этого вещественного типа. Условия, в которых вызываются эти преобразования, описаны в разд. Если универсальное-вещественное значение — хранимое число, то неявное преобразование вырабатывает соответствующее значение; если оно принадлежит диапазону хранимых чисел, но не является хранимым числом, то преобразуемое значение может быть любым значением в диапазоне, определенном ближайшими хранимыми предыдущим и последующим числами универсального-вещественного значения.
Выполнение операции типа вырабатывает значение вещественного типа и может возбудить исключение NUMERIC_ERROR, как поясняется в разд. 7, если она не может вырабатывать корректный результат (т.е. соответствующее одному из возможных математических результатов значение не принадлежит диапазону хранимых чисел); в частности, это исключение может быть возбуждено неявным преобразованием. Однако от реализации не требуется возбуждать исключение NUMERIC_ERROR, если операция — часть большего выражения, которое может быть корректно вычислено (см. 11.6).
Предвыполнение определения вещественного типа включает предвыполнение ограничения плавающего или фиксированного типа и создает вещественный тип.
. Алгоритм, использующий только минимальные свойства чисел, которые гарантированы определением типа для модельных чисел, будет переносимым без каких-либо предосторожностей.
Ссылки: вещественный литерал 2.4, исключение NUMERIC_ERROR 11.1, литерал 4.2, ограничение плавающего типа 7, ограничение фиксированного типа 3.5,7, определение типа 1, предопределенная операция 3, предвыполнение 3.9, преобразование 4.6, тип 3.3, универсальный тип 4.10.
7. ПЛАВАЮЩИЕ ТИПЫ
Для плавающих типов граница ошибки определяется заданием относительной погрешности в виде требуемого минимального числа значащих десятичных цифр.
ограничение-плавающего-типа ::=
определение - точности - плавающего - типа [ограничение - диапазона] определение - точности - плавающего - типа:: = digits статическое- простое - выражение
Минимальное число значащих десятичных цифр определяется значением статического простого выражения в определении точности плавающего типа. Это значение должно быть некоторым целым типом и должно быть положительным (ненулевым); в дальнейшем оно обозначено буквой D. Если ограничение плавающего типа использовано как определение вещественного типа и включает ограничение диапазона, то каждая граница диапазона должна быть определена статическим выражением некоторого вещественного типа, но две границы не обязаны иметь один и тот же вещественный тип.
Для данного основания определена следующая каноническая форма отличного от нуля модельного числа плавающего типа:
знак *мантисса *(основание**порядок)
В этой форме: знак — либо +1, либо -1; мантисса выражена в системе счисления, заданной основанием; порядок — целое число (возможно, отрицательное), такое, что целая часть мантиссы равна нулю, а первая цифра ее дробной части не равна нулю.
Число D — минимальное требуемое число десятичных цифр после точки в десятичной мантиссе (т.е.' если основание равно десяти). Значение D в свою очередь определяет число В — минимальное требуемое число двоичных цифр после точки в двоичной мантиссе (т.е. если основание равно двум). Число В связано с D и равно такому минимальному значению, что относительная точность двоичной формы не меньше точности для десятичной формы. (Число В равно ближайшему целому, превышающему (D*log(10)/log(2)) +1.)
Модельные числа, заданные определением точности плавающего типа, включают нуль и все числа, у которых двоичная каноническая форма имеет точно В цифр после точки в мантиссе и порядок в диапазоне -4*В.. +4*В. Гарантированная минимальная точность операций над плавающим типом определена в терминах его модельных чисел с ограничением плавающего типа, которое формирует соответствующее определение вещественного типа (см. 7).
Предопределенные плавающие типы включают тип FLOAT. Реализация может иметь также предопределенные типы SHORT_FLOAT и LONG_FLOAT с точностью (существенно) меньшей и большей соответственно, чем у FLOAT. Базовым типом каждого предопределенного плавающего типа является он сам. Модельные числа каждого предопределенного плавающего типа определены числом D десятичных цифр, вырабатываемых атрибутом DIQITS (см. 8).
Для каждого предопределенного плавающего типа (а следовательно, и для каждого производного от него типа) набор хранимых чисел определен следующим образом. Хранимые числа имеют то же самое число цифр В мантиссы, что и модельные числа типа, а порядок — в диапазоне -Е.. +Е, где Е зависит от реализации и равно по крайней мере 4*В для модельных чисел. (Следовательно, хранимые числа включают модельные числа.) Правила определения точности операций над модельными и хранимыми числами Даны в разд. 7. Хранимые числа подтипа те же, что и для его базового типа.
Описание плавающего типа, представленное в одной из двух форм (т.е. с возможным ограничением диапазона, обозначенным квадратными скобками, или без него):
type Т is digits D [range L .. R];
по определению эквивалентно следующим описаниям:
type плавающий - тип is new предопределенный-плавающий-тип; subtype T is плавающий-тип digits D [range плавающий-тип (L). .плавающий -тип (R)];
где плавающий-тип является анонимным, а предопределенный плавающий тип неявно выбран реализацией так, что его модельные числа определяются значением D; кроме того, если добавлен диапазон L.-R, то L и R должны принадлежать диапазону хранимых чисел. Описание плавающего типа неправильно, если ни один из предопределенных плавающих типов не удовлетворяет этим требованиям, кроме типа универсальный-вещественный. Максимальное число цифр, которое может быть задано определением точности плавающего типа, определяется именованным числом SYSTEM.MAX_DIGITS (см. 1).
Предвыполнение описания плавающего типа состоит из предвыполнения эквивалентных описаний типа и подтипа.
Если ограничение плавающего типа следует за обозначением типа в указании подтипа, то обозначение типа должно задавать плавающий тип или подтип. Ограничение плавающего типа совместимо с обозначением типа, только если число D в определении точности плавающего типа не больше соответствующего числа D для типа или подтипа в обозначении типа. Кроме того, если ограничение плавающего типа включает ограничение диапазона, то ограничение плавающего типа совместимо с обозначением типа, только если ограничение диапазона совместимо с обозначением типа.
Предвыполнение такого указания подтипа включает Предвыполнение ограничения диапазона, если оно есть; оно создает подтип плавающего типа, модельные числа которого определены соответствующим определением точности плавающего типа. Значение плавающего типа принадлежит плавающему подтипу тогда у только тогда, когда оно принадлежит диапазону подтипа.
Одни и те же арифметические операции предопределены для всех плавающих типов (см. 4.5).
. Ограничение диапазона допустимо в указании плавающего подтипа непосредственно после обозначения типа либо как часть ограничения плавающего типа. В обоих случаях границы диапазона должны принадлежать базовому типу обозначения типа (см. 35). Наложение ограничения плавающего типа на обозначение типа в указании подтипа не может уменьшить допустимый диапазон значений, если оно не включает ограничение диапазона (диапазон модельных чисел, которые соответствуют заданному числу цифр, может быть меньше, чем диапазон чисел обозначения типа). Принадлежащее плавающему подтипу значение не обязательно является модельным числом подтипа.
Содержание раздела