Книга: Учебное пособие по курсу «Нейроинформатика»
Общий стандарт
Разделы на этой странице:
Этот раздел содержит описание элементов стандарта, общих для всех компонентов нейрокомпьютера.
Стандарт типов данных
При описании запросов, структур данных, стандартов компонентов нейрокомпьютера необходимо использовать набор первичных типов данных. Поскольку в разных языках программирования типы данных называются по-разному, введем единый набор обозначений для них.
Таблица 1. Типы данных для всех компонентов нейрокомпьютера
Тип | Длина (байт) | Значения | Описание |
---|---|---|---|
Color | 2 | Используется для задания цветов. Является совокупностью из 16 элементарных (битовых) флагов. См. раздел «Цвет и операции с цветами». | |
Real | 4 | от ±1.5 e-45 до ±3.4 e38 | Действительное число. Величина из указанного диапазона… В дальнейшем называется «действительное». |
RealArray | 4*N | Массив действительных чисел. | |
PrealArray | 4 | Используется для передачи массивов между компонентами. Имеет значение адреса массива действительных чисел. | |
Integer | 2 | от –32768 до 32767 | Целое число из указанного диапазона. В дальнейшем называется «целое». |
IntegerArray | 2*N | Массив целых чисел. | |
PintegerArray | 4 | Используется для передачи массивов между компонентами. Имеет значение адреса массива целых чисел. | |
Long | 4 | от –2147483648 до 2147483647 | Целое число из указанного диапазона. В дальнейшем называется «длинное целое». |
LongArray | 4*N | Массив длинных целых чисел. | |
PlongArray | 4 | Используется для передачи массивов между компонентами. Имеет значение адреса массива длинных целых чисел. | |
Logic | 1 | True, False | Логическая величина. Далее называется «логическая». |
Logic | 1 | True, False | Логическая величина. Далее называется «логическая». |
LogicArray | N | Массив логических переменных. | |
PlogicArray | 4 | Используется для передачи массивов между компонентами. Имеет значение адреса массива логических переменных. | |
FuncType | 4 | Адрес функции. Используется при необходимости передать функцию в качестве аргумента. | |
Visual | 4 | Отображаемый элемент. Служит для адресации отображаемых элементов в интерфейсных функциях. Тип значений зависит от реализации библиотеки интерфейсных функций и не может изменяться пользователем иначе, чем через вызов интерфейсной функции. | |
String | 256 | Строка символов. | |
PString | 4 | Адрес строки символов. Служит для передачи строк в запросах | |
Pointer | 4 | Не типизованный указатель (адрес). Этот тип совместим с любым типизованным указателям. |
Числовые типы данных integer, long и real предназначены для хранения различных чисел. Переменные числовых типов допускаются в языках описания всех компонентов нейрокомпьютера. При необходимости записать в один массив числовые переменные различного типа следует использовать функции приведения типов, описанные в разделе «Приведение типов»
Строка. Символьный тип данных предназначен для хранения комментариев, названий полей, имен сетей, оценок и другой текстовой информации. Все строковые переменные занимают 256 байт и могут включать в себя до 255 символов. Первый байт строки содержит длину строки. В переменных типа строка возможен доступ к любому символу как к элементу массива. При этом длина имеет индекс ноль, первый символ — 1 и т. д.
Указатель на строку. При передаче данных между компонентами сети и процедурами в пределах одного компонента удобно вместо строки передавать указатель на строку, поскольку указатель занимает всего четыре байта. Для этой цели служит тип указатель на строку.
Логический тип используется для хранения логических значений. Значение истина задается предопределенной константой true, значение ложь — false.
Массивы. В данном стандарте предусмотрены массивы четырех типов — логических, целочисленных, длинных целых и действительных переменных. Длины массивов определяются при описании, но все массивы переменных одного типа относятся к одному типу, в отличие от языков типа Паскаль. Использование функций приведения и преобразования типов позволяют получать из этих массивов структуры произвольной сложности. Элементы массивов всегда нумеруются с единицы.
Вне зависимости от типа массива нулевой элемент массива имеет тип Long и содержит длину массива в элементах. На рис. 1 приведена схема распределения памяти всех типов массивов, каждый из которых содержит шесть элементов.
Все массивы, как правило, используется только в пределах одного компонента. При передаче массивов между компонентами или между процедурами в пределах одного компонента используются указатели на массивы.
Адрес функции. Этот тип используется для передачи функции в качестве аргумента. Переменная типа functype занимает четыре байта и является адресом функции. В зависимости от реализации по этому адресу может лежать либо начало машинного кода функции, либо начало текста функции. В случае передачи текста функции первые восемь байт по переданному адресу содержат слово «function».
Отображаемый элемент. Переменные типа visual (отображаемый элемент) Служат для адресации отображаемых элементов в интерфейсных функциях. Тип значений зависит от реализации библиотеки интерфейсных функций и не может изменяться пользователем иначе, чем через вызов интерфейсной функции. Особо следует отметить, что библиотека интерфейсных функций не является частью ни одного из компонентов.
Переменные типа цвет и операции с цветами
Использование цветов позволяет гибко разбивать множества на подмножества. В нейрокомпьютере возникает необходимость в разбиении на подмножества (раскрашивании) задачника. В этом разделе описывается стандарт работы с переменными типа цвет.
Значение переменной типа цвет (color)
Переменная типа цвет представляет собой двухбайтовое беззнаковое целое. Однако основное использование предполагает работу не как с целым числом, а как с совокупностью однобитных флагов. При записи на диск используется символьное представление двоичной записи числа с ведущими нулями и разбиением на четверки символом «.» (точка), предваряемая заглавной буквой «B» латинского алфавита, или символьное представление шестнадцатеричной записи числа с ведущими нулями, предваряемая заглавной буквой «H» латинского алфавита. В табл. 2 приведена нумерация флагов (бит) переменной типа Color, их шестнадцатеричное, десятичное и дво ичное значение. При использовании в учителе или других компонентах может возникнуть необходимость в присвоении некоторым из флагов или их комбинаций имен. На такое именование не накладывается никаких ограничений, хотя возможно будет выработан стандарт и на названия часто используемых цветов (масок, совокупностей флагов).
Таблица 2. Нумерация флагов (бит) переменной типа Color
Номер | Шестнадцатиричная запись | Десятичная запись | Двоичная запись |
---|---|---|---|
0 | H0001 | 1 | B.0000.0000.0000.0001 |
1 | H0002 | 2 | B.0000.0000.0000.0010 |
2 | H0004 | 4 | B.0000.0000.0000.0100 |
3 | H0008 | 8 | B.0000.0000.0000.1000 |
4 | H0010 | 16 | B.0000.0000.0001.0000 |
5 | H0020 | 32 | B.0000.0000.0010.0000 |
6 | H0040 | 64 | B.0000.0000.0100.0000 |
7 | H0080 | 128 | B.0000.0000.1000.0000 |
8 | H0100 | 256 | B.0000.0001.0000.0000 |
9 | H0200 | 512 | B.0000.0010.0000.0000 |
10 | H0400 | 1024 | B.0000.0100.0000.0000 |
11 | H0800 | 2048 | B.0000.1000.0000.0000 |
12 | H1000 | 4096 | B.0001.0000.0000.0000 |
13 | H2000 | 8192 | B.0010.0000.0000.0000 |
14 | H4000 | 16384 | B.0100.0000.0000.0000 |
15 | H8000 | 32768 | B.1000.0000.0000.0000 |
Операции с переменными типа цвет (color)
Таблица 3. Предопределенные константы операций с переменными типа Цвет (Color)
Код | Обозначение | Вычисляемое выражение | Тип результата | Пояснение |
---|---|---|---|---|
1 | CEqual | A=B | Logic | Полное совпадение. |
2 | CIn | A And B = A | Logic | A содержится в В. |
3 | CInclude | A And B = B | Logic | А содержит В. |
4 | CExclude | A And B = 0 | Logic | A и В взаимоисключающие. |
5 | CIntersect | A And B <> 0 | Logic А и В пересекаются. | |
6 | COr | A Or B | Сolor | Побитное включающее или. |
7 | CAnd | A And B | Color | Побитное и. |
8 | CXor | A Xor B | Color | Побитное исключающее или |
9 | CNot | Not A | Color | Побитное отрицание |
В табл. 3 приведены операции с переменными типа Color. Первые пять операций могут использоваться только для сравнения переменных типа Color, а остальные четыре операции — для вычисления выражений типа Color.
В ряде запросов необходимо указать тип операции над цветом. Для передачи таких параметров используется переменная типа Integer. В качестве значений передается содержимое соответствующей ячейки столбца код табл. 3.
Приведение и преобразование типов
Есть два пути использовать переменную одного типа как переменную другого типа. Первый путь состоит в преобразовании значения к заданному типу. Так, для преобразования целочисленной переменной к действительному типу, достаточно просто присвоить переменной действительного типа целочисленное значение. С обратным преобразованием сложнее, поскольку не ясно что делать с дробной частью. В табл. 4 приведены все типы, которые можно преобразовать присваиванием переменной другого типа. В табл. 5 приведены все функции преобразования типов.
Таблица 4. Преобразование типов прямым присваиванием переменной значения выражения
Тип переменной | Тип выражения | Пояснение |
---|---|---|
Real | Real, Integer, Long | Значение преобразуется к плавающему виду. При преобразовании значения выражения типа Long возможна потеря точности. |
Long | Integer, Long | При преобразовании типа Integer, действуют следующие правила. Значение переменной помещается в два младших байта. Если значение выражения больше либо равно нолю, то старшие байты равны H0000, в противном случае старшие байты равны HFFFF. |
Integer | Integer, Long | При преобразовании выражения типа Long значение двух старших байт отбрасывается. |
Таблица 5. Функции преобразования типов
Имя функции | Тип аргумента | Тип результата | Описание |
---|---|---|---|
Real | Real, Integer, Long | Real | Аналогично прямому присваиванию |
Integer | Integer, Long | Integer | Аналогично прямому присваиванию |
Long | Integer, Long | Long | Аналогично прямому присваиванию |
Str | Real, Long, Integer | String | Представляет числовой аргумент в виде символьной строки в десятичном виде |
Round | Real | Long | Округляет действительное значение до ближайшего длинного целого. Если значение действительного выражения выходит за диапазон длинного целого, то результат равен нулю. |
Truncate | Real | Long | Преобразует действительное значение в длинное целое путем отбрасывания дробной части. Если значение действительного выражения выходит за диапазон длинного целого, то результат равен нулю. |
LVal | String | Long | Преобразует длинное целое из символьного представления во внутреннее. |
RVal | String | Real | Преобразует действительное число из символьного представления во внутреннее. |
StrColor | Color | String | Преобразует внутреннее представление переменной типа Color в соответствии с разд. «Значение переменной типа цвет» |
ValColor | String | Color | Преобразует символьное представление переменной типа Color во внутреннее. |
Color | Integer | Color | Интерпретирует целое число как значение типа Color. |
При вычислении числовых выражений действуют следующие правила преобразования типов:
1. Выражения вычисляются слева на право.
2. Если два операнда имеют один тип, то результат имеет тот же тип.
3. Если аргументы имеют разные типы, то выражение имеет старший из двух типов. Список числовых типов по убыванию старшинства: Real, Long, Integer.
4. Результат операции деления действительных чисел (операция «/») всегда имеет тип Real, вне зависимости от типов аргументов.
В отличие от преобразования типов приведение типов позволяет по-разному интерпретировать одну область памяти. Функция приведения типа применима только к переменным или элементам массива (преобразование типов применимо и к выражениям). Рекомендуется использовать приведение типов только для типов, имеющих одинаковую длину. Например, Integer и Color или Real и Long. Список функций приведения типов приведен в табл. 6.
Таблица 6. Функции приведения типов
Название | Тип результата | Описание |
---|---|---|
Treal | Real | Четыре байта, адресуемые приводимой переменной, интерпретируются как действительное число. |
Tinteger | Integer | Два байта, адресуемые приводимой переменной, интерпретируются как целое число. |
Tlong | Long | Четыре байта, адресуемые приводимой переменной, интерпретируются как длинное целое. |
TrealArray | RealArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив действительных чисел. |
TPRealArray | PRealArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив действительных чисел. |
TintegerArray | IntegerArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив целых чисел. |
TPIntegerArray | PIntegerArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив целых чисел. |
TlongArray | LongArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив длинных целых. |
TPLongArray | PLongArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив длинных целых. |
Tlogic | Logic | Адресуемый приводимой переменной байт интерпретируются как логическая переменная. |
TlogicArray | LogicArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив логических переменных. |
TPLogicArray | LogicArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив логических переменных. |
TColor | Color | Два байта, адресуемые приводимой переменной, интерпретируются как переменная типа цвет. |
TFuncType | FuncType | Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес функции. |
TPointer | Pointer | Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес. |
Tstring | String | 256 байт области памяти, адресуемой приводимой переменной, интерпретируются как строка символов. |
TPString | PString | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на строку символов. |
Tvisual | Visual | Четыре байта, адресуемые приводимой переменной, интерпретируются как отображаемый элемент. |
Следующие примеры иллюстрируют использование преобразования и приведения типов:
При вычислении следующих четырех выражений, получаются различные результаты
4096 * 4096 = 0
Поскольку константа 4096 имеет тип Integer, а 4096 * 4096 = 16777216 = 256 * 65536, то есть младшие два байта результата равны нулю.
Long(4096 * 4096) = 0
Поскольку оба сомножителя имеет тип Integer, то и выражение имеет тип Integer. Следовательно, результат умножения равен нулю, который затем преобразуется к типу Long.
Long(4096) * 4096 = 16777216
Поскольку первый сомножитель имеет тип длинное целое, то и выражение имеет тип длинное целое.
4096.0 * 4096 = 1.677722E+7
Поскольку первый сомножитель имеет тип Real, то и выражение имеет тип Real. Из-за недостатка точности произошла потеря точности в седьмом знаке.
В следующем примере, используя приведение типов, в массив действительных чисел A размером в 66 элементов складываются: действительное число в первый элемент массива; длинное целое во второй элемент массива и символьную строку в элементы с 3 по 66.
A[1] = 1.677722E+7
TLong(A[2]) = 16777216
TString(A[3]) = ‘Пример приведения типов’
Необходимо отметить, что элементы массива A, начиная со второго, после выполнения приведенного выше фрагмента программы не рекомендуется использовать как действительные числа, поскольку элемент A[2] содержит значение 2.350988Е-38, а элемент A[5] — значение –4.577438Е-18. Значение элементов, начиная с A[8] (символьная строка ‘Пример приведения типов’ содержит 23 символа и занимает 24 байта, то есть шесть элементов массива) вообще не зависят от приведенного фрагмента программы и содержат «мусор», который там находился ранее.
В списке типов определены только одномерные массивы. Однако, при необходимости, возможно использование двумерных массивов. Для этого в одномерный массив A необходимо поместить указатели на одномерные массивы. При этом I,J-й элемент двумерного массива записывается в виде:
TPRealArray(A[I])^[J]
В этом примере использована функция приведения типов TPRealArray, указывающая, что I-й элемент массива A нужно интерпретировать как указатель на одномерный массив действительных чисел, и операция «^» указывающая, что вместо указателя на массив TPRealArray(A[I]) используется массив, на который он указывает.
Таким образом, использование функций приведения типов позволяет из одномерных массивов строить структуры произвольной сложности. В языках программирования, таких как C и Паскаль, существует возможность строить пользовательские типы данных. При разработке стандарта эти возможности были исключены, поскольку использование пользовательских типов, облегчая написание программ, сильно затрудняет разработку компилятора или интерпретатора, а при использовании этого языка для описания компонентов нейрокомпьютера необходимость в пользовательских типах данных возникает чрезвычайно редко. Например, при описании примеров всех компонентов, приведенных в данной работе, такая необходимость ни разу не возникла.
- 1.2. Процессы, потоки и общий доступ к информации
- Приложение 3. Стандарт нейрокомпьютера
- Стандартный производственный процесс организации (СППО)
- «Вещи» как носители корпоративных стандартов
- Знание стандартов обслуживания покупателей, принятых в вашем магазине
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
- 7.1 Общая информационная модель и стандарт WBEM
- 7.9 Будущее управления хранилищами по версии ассоциации SNIA: стандарты SMI
- 8.2 Стандарт InfiniBand
- 6.2. Создание и автоматическое заполнение бланков стандартных документов
- Стандартные списки