Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 8825-1-2003 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 1. Спецификация базовых (BER), канонических (CER) и отличительных (DER) правил кодирования

ПРИЛОЖЕНИЕ С
(справочное)

Пример кодирования значения действительного числа

С.1 Отправитель, обычно, проверяет свое машинное представление чисел с плавающей точкой для определения (независящих от значения) алгоритмов, которые должны использоваться для преобразования значений между этим представлением и октетами длины и содержимого в кодировании вещественного значения АСН.1. В настоящем приложении описаны шаги, которые должны быть сделаны в таком процессе, исходя из (искусственного) машинного представления мантиссы чисел с плавающей точкой, показанного на рисунке С.1.

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

Рисунок С.1 - Представление чисел с плавающей точкой



С.2 Октеты содержимого, которые должны быть созданы для отправки ненулевого значения с использованием двоичного кодирования (как определено в настоящем стандарте), суть:

1    Октеты для Октеты для

где (знак мантиссы) зависит от преобразуемого значения, - фиксированное значение (например, 10) для основания представления (в данном случае принято основание 16), - фиксированное значение , вычисленное, как описано в С.3, - фиксированная длина значения экспоненты, вычисленная, как описано в С.4. (В настоящем приложении не рассматривается случай, когда превышает три октета.)

С.3 Алгоритм будет передавать октеты 1-5 машинного представления как значение после установки битов 8-3 октета 1 и битов 4-1 октета 5 равными нулю. Принято, что подразумеваемая десятичная точка в машинном представлении находится между битами 2 и 1 октета 1. Это подразумеваемое положение может быть смещено к ближайшей точке после конца октета 5 путем уменьшения значения до преобразования. Во взятой в качестве примера системе можно смещать на четыре бита при уменьшении экспоненты на единицу (т.к. принято основание 16), так что уменьшение на 9 поместит подразумеваемую точку между битами 6 и 5 октета 6.

Следовательно, для правильного размещения точки в значением должно быть , умноженное на 2. (Подразумеваемое положение в - после бита 1 октета 5). Таким образом, получаем основные параметры:

=3 (так что =11),

декремент экспоненты равен 9.

С.4 Длина, необходимая для экспоненты, вычисляется через максимальное число октетов, необходимых для представления значений:

- избыток - декремент экспоненты;

- избыток - декремент экспоненты,

где и - минимальное и максимальное целые значения представления экспоненты, избыток - любое значение, которое нужно вычесть для получения правильного значения экспоненты, а декремент экспоненты вычислен в С.3. Пусть это вычисление дает длину 3 октета. Тогда равно 10. Примем также, что избыток равен нулю.

С.5 Алгоритм пересылки теперь такой:

а) передать поле октетов идентификатора объекта базовых правил кодирования с тегом АСН.1 для действительного типа;

б) проверить на равенство нулю и, если это так, передать поле длины базовых правил кодирования АСН.1 со значением 0 (нет октетов содержимого) и завершить алгоритм;

в) проверить и запомнить знак мантиссы;

г) передать поле длины базовых правил кодирования АСН.1 со значением 9, имеющее вид:

11101110, если отрицательное, или

10101110, если положительное;

д) создать и передать 4 октета экспоненты со значением

-9;

е) обнулить биты 8-3 октета 1 и биты 4-1 октета 5, а затем передать 5 октетов мантиссы.