Как вариант 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




Ответить с цитированием