Показать сообщение отдельно
Старый 30.11.2020, 20:12   #111
MadKid
Member
 
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Обмениваемся своими макросами

Вот вам макрос преобразования Long в 32-битный Real (он же Float).

Иногда возникает недопонимание при считывании чисел с плав. точкой из периферийных устройств. Вместо каких-то адекватных значений видим сумасшедший рандом. Это происходит из-за того, что сегнетикс и периферийное устройство могут хранить байты в разном порядке.

Для решения вопроса приходится считывать число, как Long, переставлять байты в нужном порядке, и потом преобразовывать в Real.

Сразу оговорюсь, что вот тут задача уже решена комплексно
https://forum.segnetics.com/showthread.php?t=461

Но, как мне показалось , там не совсем рациональная реализация.
В моём оптимизированном варианте все действия по возможности совершаются в "целом" виде, без умножений и делений (сдвигами и битовыми масками), и перевод в real делается на самых последних этапах.

Итого, у меня как минимум, отсутствует деление с плав. точкой, и присутствует только одно возведение в степень вместо двух.

П.С. Вопрос перестановки байтов вынесен за скобки, это задача, в которой оптимизировать нечего.
Вложения
Тип файла: msl IEEE754.msl (202.5 Кбайт, 59 просмотров)
MadKid вне форума   Ответить с цитированием
Благодарность от: