Вот вам макрос преобразования Long в 32-битный Real (он же Float).
Иногда возникает недопонимание при считывании чисел с плав. точкой из периферийных устройств. Вместо каких-то адекватных значений видим сумасшедший рандом. Это происходит из-за того, что сегнетикс и периферийное устройство могут хранить байты в разном порядке.
Для решения вопроса приходится считывать число, как Long, переставлять байты в нужном порядке, и потом преобразовывать в Real.
Сразу оговорюсь, что вот тут задача уже решена комплексно
https://forum.segnetics.com/showthread.php?t=461
Но, как мне показалось , там не совсем рациональная реализация.
В моём оптимизированном варианте все действия по возможности совершаются в "целом" виде, без умножений и делений (сдвигами и битовыми масками), и перевод в real делается на самых последних этапах.
Итого, у меня как минимум, отсутствует деление с плав. точкой, и присутствует только одно возведение в степень вместо двух.
П.С. Вопрос перестановки байтов вынесен за скобки, это задача, в которой оптимизировать нечего.