|
|
|
UniBomb |
|
||||
Новичок Награды: 1 Профиль Группа: Участник Клуба Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Сорри если не в тот раздел, но более подходящего я не нашёл)))
Итак, ситуация - уже три года что я работаю на текущем месте я занимаюсь сопровождением одной программы, которую писал мой предшественник. Программа написана на avr'овском ассемблере и по объёму занимает 3333 строки, причём написана впопыхах и местами очень коряво. За эти три года я почти полностью изучил её методами тыка и наблюдения за поведением, но осталось одно большое белое пятно - я так и не понял в каком формате представляются данные. А тут как раз задача изменить некоторые из них. Вот в определении формата я и прошу помощи Каждое число занимает 4 байта и являеться вещественным. По коду частенько встречаються инструкции вида:
что в переводе на более понятный ЯП выглядит так:
где с - не представляет интереса, а x - это и есть искомое число (х = ([0x00][0x19][0x20][0x20]) лазая по программе я нашёл несколько явных указаний этих числе как в примере выше и точно знаю их значения: х = ([0x00][0x19][0x20][0x20]) = 0,9 х = ([0x01][0x33][0x00][0x00]) = 1,2 х = ([0x16][0xBA][0x2E][0x8B]) = 22,72727272 Это те числа, значения которых я смог определить или значение которых были указаны в комментариях. Сначала я думал что числа представлены в формате с плавающей запятой, но тогда былобы вот так: х = ([0x00][0x19][0x20][0x20]) = 2,30741168252039E-39 х = ([0x01][0x33][0x00][0x00]) = 3,28771076245609E-38 х = ([0x16][0xBA][0x2E][0x8B]) = 3,00792934331708E-25 Потом я заметил, что старший байт равен целой части числа и после этого предположил, что это формат с фиксированной запятой, но несмог декодировать числа: 00.192020(16) = 0,1646624(10) //не то 00.192020(16) = 00000000,000110010010000000100000(2) = 0 + 1*2^-4 + 1*2^-5 + 0*2^-8 + etc = ~0,078(10) //не то 00.192020(16) = 0000.0000,0001.1001.0010.0000.0010.0000(2) = 0 + 1*10^-1+9*10^-2+etc = 0,19101(10) //не то В общем помогите пожалуйста зы: переписать всё это дело на С желание возникало многократно, но всё руки недоходили... Это сообщение отредактировал(а) UniBomb - 18.3.2009, 14:41 |
||||
|
|||||
dumb |
|
|||
sceloglauxalbifacies Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 1 Всего: 158 |
1,2 * 2^24 = 20132659,2 = 0x1333333
22,72727272 * 2^24 = 381300363,51434752 = 0x16BA2E8B во-первых, видимо значения(кроме последнего) несколько округленные. а во-вторых 0,9 - это по всей видимости просто ошибка, ибо 0x192020 / 2^24 = 0,0981464385986328125 |
|||
|
||||
nickless |
|
|||
Гентозавр Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 1 Всего: 181 |
Это называется ИМХО Q16.24 Q (number format)
-------------------- Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
dumb |
|
|||
sceloglauxalbifacies Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 1 Всего: 158 |
почти. полагаю таки 7.24
|
|||
|
||||
UniBomb |
|
|||
Новичок Награды: 1 Профиль Группа: Участник Клуба Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Посыпаю голову пеплом - да, 0,09 Видимо да, т.к. первые два числа я мог отследить только по показаниям, выводимым на дисплей, а на нём показывалось до двух знаков после запятой. Причём значения ниже 0,09 и выше 1,2 непоказывались (это такие ограничения прибора) и 1,2 показывалось чотко как 1,20. Спасибо вам обоим за ответ |
|||
|
||||
nickless |
|
|||
Гентозавр Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 1 Всего: 181 |
-------------------- Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Форматы файлов и данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |