TO_EUHI - преобразование из REAL в формат EUHI
Назначение.
Функция TO_EUHI() преобразовывает 32-разрядное вещественное значение в целочисленное значение формата EUHI.
Входные параметры.
-
in1 - тип данных REAL (32-битное вещественное число).
-
in2 - тип данных INTEGER (возвращаемое значение в случае ошибки).
Выходной параметр.
-
out - тип данных INTEGER (целое число в формате EUHI).
Алгоритм преобразования.
Рассмотрим алгоритм преобразования в формат EUHI на примере вещественного числа 20.24:
-
Структура итогового 16-битного формата состоит из старшего бита для определения знака, 6 бит экспоненты и 9 младших бит мантиссы:

-
Первый знаковый бит заполняется 0 при положительном числе и 1 при отрицательном:

-
Определяется значение экспоненты: единица в двоичном формате смещается влево на количество разрядов, при которых полученное после смещения число максимально близко к исходному значению, но не превышает его. Для числа 20.24 экспонента равна 4, так как при смещении на 4 разряда влево получаем значение 16 - максимальное не превышающее 20.24.

-
Осуществляется смещение экспоненты на десятичное число 31 и ее запись в битовую маску:
-
Определяется значение мантиссы по формуле (<исходное значение> - 2exp) * 512 / 2exp, с отбрасыванием дробной части. После чего двоичное представление результата записывается в битовую маску.

-
Итоговая 16-битная маска преобразовывается в целочисленное значение: 01000110100001112 = 1805510.
Описание синтаксиса.
|
На языке ST
|
На языках FBD/LD
|
|
out := TO_EUHI(in1, in2)
|
![]() |
|
Примеры:
//out = 18055
TO_EUHI(20.24, 3);
//out = 50823
TO_EUHI(-20.24, 3);
//out = 3, т.к. неверное значение
TO_EUHI(2e+26, 3);
|
Примеры:
![]() ![]() |



