Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Спец формат -> IEEE-754, не получается придумать алгоритм конверт 
V
    Опции темы
chaos
Дата 23.9.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



День добрый!
Сижу уже 20 минут не получается сконвертировать число из памяти в формат IEEE-754.

В документации написано:
Код

Числа    с   плавающей     точкой     являются   основным     способом представления арифметической информации и занимают в памяти четыре подряд расположенных байта (в порядке увеличения адреса):
•  байт 1 - увеличенный на десятичное 128 (т.е. на шестнадцатиричное 80) двоичный порядок;
•  байты 2,3,4 - 23-разрядная двоичная нормализованная мантисса со знаком в прямом коде, без
   скрытых разрядов. Знак числа содержится в старшем (седьмом) бите байта 2, равен “0” для
   положительных чисел и “1” для отрицательных. Байт 2 содержит наиболее значащие разряды, байт
   4 – наименее значащие. Числа нормализованные, и для всех чисел, кроме строгого нуля, шестой бит
   байта 2 содержит двоичную единицу.


имеется 2 примера:
  • 85 65 72 B0 -> 25,362 
  • 8A 51 40 00 -> 650
может кто сообразит? smile

Заранее благодарен!

Добавлено через 4 минуты и 46 секунд
не совсем понятно чот дальше делать после:
1. выделил порядок: (value & 0xFF000000) >> 24
2. выдкелил знак числа (value & 0x00800000)
3. выделил мантису (value & 0x007F0000)

вот есть уменя три состовляющих
PM WWW   Вверх
Akina
Дата 23.9.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(chaos @  23.9.2008,  13:24 Найти цитируемый пост)
3. выделил мантису (value & 0x007F0000)

value & 0x007FFFFF

Добавлено через 2 минуты и 27 секунд
Вот только я не понял - что во что конвертим...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chaos
Дата 23.9.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(Akina @ 23.9.2008,  09:36)
value & 0x007FFFFF

Добавлено @ 12:39
Вот только я не понял - что во что конвертим...

ага 0x007FFFFF. ошибся. сегодня не соображаю.
конвертим странный формат данных описанный выше в стандартный IEEE-754

Добавлено @ 12:52
PS те необходимо из 8A 51 40 00(650) получить 00 80 22 44(650)

Это сообщение отредактировал(а) chaos - 23.9.2008, 12:55
PM WWW   Вверх
Akina
Дата 23.9.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(chaos @  23.9.2008,  13:24 Найти цитируемый пост)
8A 51 40 00 -> 650

Мантисса = 514000 bin, Для перевода в целые надо домножить на 2^23, т.е. мантисса (после перевода в десятичку) = 5324800 / (2^23)
Знак - положительный.
Порядок - 8А-80 = 0А = 2^10

Итого число = 5324800 / (2^23) * (2^10) = 650

Добавлено через 2 минуты и 44 секунды
А вот как соотносится 650 и 00 80 22 44 - я чтой-то не понимаю...

Добавлено через 8 минут и 53 секунды
Аналогично 85 65 72 B0 -> 25,362 

Мантисса = 6572B0 bin, Для перевода в целые надо домножить на 2^23, т.е. мантисса (после перевода в десятичку) = 6648496 / (2^23)
Знак - положительный.
Порядок - 85-80 = 5 = 2^5

Итого число = 6648496 / (2^23) * (2^5) = 25,36199951171875, ну можно считать что 25,362 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chaos
Дата 23.9.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Akina, опа! все так просто. smile Спасибо!

а вот не понял только куда засунуть знак? если число отрицательное.

Добавлено через 8 минут и 38 секунд
а ,понял, если бит знаковый 1, то домнажаем на -1.
прикольный алгоритм smile а я устал уже двигать биты.
PM WWW   Вверх
chaos
Дата 23.9.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Akina, тока я не совсем понял алгоритм smile как так?
PM WWW   Вверх
Akina
Дата 23.9.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



а в чем собсно проблема?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.