Формат Microchip одинарной точности | |
---|---|
AngelOKES Автор Сообщений: 828 Дата регистрации: 08.02.2012 |
По запросу получаю набор их 4 байт: F8E0D1B8
По алгоритму предоставления ответа я переворачиваю тетрады: 8F0E1D8B Теперь нужно преобразовать в число и я даже заведомо знаю какое это число 5025,820 Но преобразую данную строку по алгоритму одинароной точности получаю совсем не это число и пытаясь найти решение, вычисляю его самостоятельно и получаю последовательность 459D0E8F Сравнивая эти 2 строки нахожу одинаковые пары, это 0E8F, переворачиваю строку согласно этому алгоритму и получаю B81D0E8F Внутренний алгоритм мне не известен и я не понимаю каким образом ещё могли закодировать B81D чтобы получить 459D? я уже всю голову сломал, официальная техподдержка молчит, может у кого-то будут предположения |
Re: Формат Microchip одинарной точности | |
---|---|
AngelOKES Автор Сообщений: 828 Дата регистрации: 08.02.2012 |
Действительно формат Microchip отличается от IEEE 754, там немного по-другому, если кому интересно разложу и опишу алгоритм:
1) переводим в бинарный вид: 1000 1011 0001 1101 0000 1110 1000 1111 2) первый 8 бит это порядок (e), но чтобы вычислить нужную степень вычесть надо из полученного числа 127 3) 23 бит значность числа, 0 значит + 4) с 0 по 22 байт это мантисса (m) E=e-127 M=m*2 в степени (-23) и само число вычисляется по формуле: N = (-1) в степени S * (1 + M) * 2 в степени E и как раз получится число 5025,820 из 8F0E1D8B Осталось придумать теперь как этот алгоритм заложить в программу, по формату IEEE 754 это одна команда CTobin(0h8f0e1d8b,"4NR") Сделал маленькую процедуру, только не стал учитывать знак, отрицательных цифр там точно нет:
Исправлено 1 раз(а). Последнее : AngelOKES, 08.10.21 10:09 |
© 2000-2024 Fox Club  |