:: Visual Foxpro, Foxpro for DOS
Формат Microchip одинарной точности
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
По запросу получаю набор их 4 байт: F8E0D1B8
По алгоритму предоставления ответа я переворачиваю тетрады: 8F0E1D8B
Теперь нужно преобразовать в число и я даже заведомо знаю какое это число 5025,820
Но преобразую данную строку по алгоритму одинароной точности получаю совсем не это число и пытаясь найти решение, вычисляю его самостоятельно и получаю последовательность 459D0E8F
Сравнивая эти 2 строки нахожу одинаковые пары, это 0E8F, переворачиваю строку согласно этому алгоритму и получаю B81D0E8F
Внутренний алгоритм мне не известен и я не понимаю каким образом ещё могли закодировать B81D чтобы получить 459D?
я уже всю голову сломал, официальная техподдержка молчит, может у кого-то будут предположения
Ratings: 0 negative/0 positive
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")

Сделал маленькую процедуру, только не стал учитывать знак, отрицательных цифр там точно нет:
Lparameters lcData
mE1=Asc(Substr(lcData,4,1))
mE2=mE1-127
mM1=Asc(Substr(lcData,3,1))*256*256+Asc(Substr(lcData,2,1))*256+Asc(Substr(lcData,1,1))
mM2=mM1*(0.5**23)
lfNum=(1+mM2)*2**mE2
Return lfNum



Исправлено 1 раз(а). Последнее : AngelOKES, 08.10.21 10:09
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 36 (Гостей: 36)

© 2000-2024 Fox Club 
Яндекс.Метрика