Как вариант real в udint в формате IEEE754:
Код:
function IEEE754_: udint;
var_input
VAL : real; // Входное значение
end_var
var
i : udint;
Sign : bool; // true - если значение отрицательное
Ret : real; // Вспомогательное
Mantissa : udint; // Мантисса
Exponent : udint; // Порядок
end_var
Mantissa := 0; Exponent := 0;
if VAL = 0 then return; end_if
if VAL < 0 then // Выделяем знак числа
Sign := true; Ret := -VAL;
else
Ret := VAL;
end_if
if Ret >= 2 then // Нормируем
while Ret >= 2 do
Ret := Ret / 2; Exponent := Exponent + 1;
end_while
else
while Ret < 1 do
Ret := Ret * 2; Exponent := Exponent - 1;
end_while
end_if
Ret := Ret - 1; // Вычисляем мантиссу
for i := 0 to 22 do
Mantissa := shl(Mantissa, 1); Ret := Ret * 2;
if Ret > 1 then Ret := Ret - 1; Mantissa.0 := true; end_if
end_for
Ret := Ret *2; if Ret > 1 then Mantissa := Mantissa + 1; end_if
Exponent := Exponent + 127; // Вычисляем порядок
IEEE754_.31 := Sign; // Формируем в виде udint
IEEE754_ := IEEE754_ + shl(Exponent, 23);
IEEE754_ := IEEE754_ + Mantissa;
end_function