|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.12.2022, 21:19 | #1 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
IEEE 754 дробное в HEX
Всем привет! Второй день бьюсь в поисках решения задачки, получаю из контроллера температуру в HEX, нашел алгоритм, который преобразовал в DEC значение. Но теперь стоит обратная задача, из указанного DEC преобразовать в HEX по стандарту IEEE 754. Весь зарылся в статьях и вычислениях, но все равно упираюсь в стенку. Помогите разобрать пример (руководствуясь данной статьей Пример) не хватает полного понимания, чтобы написать алгоритм.
Рассмотрим значение 100. Открываю калькулятор - смотрю двоичное значение = 0110 0100. Представляю его в нормализованном виде как мантисса 1.00 и экспонента exp(10^2) Дальше вроде надо добавить 1 в начало, получим 1011 0010 0000 и на этом фантазия закончилась... Ща понимаю что значение 1011 0010 это 178, что больше 127. Значит 178 - 127 = 51, но что с этим дальше делать, не понимаю... (из примера на этой строке у меня ступор - 1,55625∙exp10^+2 = 1,0011011101∙exp2^+111, от куда тут появилось exp2+111) |
05.12.2022, 21:30 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
|
05.12.2022, 21:39 | #3 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
Дак вот в этом и загвоздка. Они дальше ссылаются "То есть, если наша экспоната = +7 (+111 в двоичной)", а ни как не могу понять, от куда эти 111 взялись, понятно что 0111 это 7, но как у них вышло 111 не могу никак дойти до этого момента....
|
05.12.2022, 22:30 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Запятую в числе перенесли на 7 двоичных разрядов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
06.12.2022, 09:04 | #5 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
Вооо! Вот этого понимания мне и не хватало! На 7 бит двигаем запятую и тогда все встает на свои места ))
Спасибо большое! Получается, что число 100 представляется как 0110 0100, ставим запятую 01,10 0100, это 6 знаков. 127 + 6 = 133 - это значение экспоненты. В двоичном = 1000 0101 Получаем: 01000010110010000000000000000000 0100 0010 1100 (1000 0000 0000 0000 0000) 4 2 С (8) Последний раз редактировалось DrGrizzly; 06.12.2022 в 09:18. |
06.12.2022, 11:26 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Да, только вы лихо отбросили значимые нули: 42С80000.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
06.12.2022, 15:04 | #7 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
Стал экспериментировать с расчетами и опять какая-то магия.
Разложим число 200 В двоичном 1100 1000 Мантисса 1.1001000 Экспонента 134 = 1000 0110 Получаем 0 1000 0110 10010000000000000000000 И тут момент с взятием 8и бит експоненты. В данном случае это 0100 0011, т.е последний 0 отброшен получается? Или его нельзя отбрасывать? 0100 = 4h 0011 = 3h 10010000000000000000000 = 48 0000h Результат 43480000h Если сравнить раскладыванием числа 100, то тут какая-то неувязка... В двоичном 0110 0100 Экспонента 133 = 1000 0101 Мантисса = 1.100100 И когда соединяем экспоненту с мантиссой что-то с девятым битом не так... 0 1000 0101 10010000000000000000000 9й бит экспоненты должен перейти к мантиссе? По моим расчетам получилось 42480000, если считать как число 200. Значение мантиссы в десятичном одинаковое(на сайте проверки) у 100 и 200... что собственно страннооо Проверка расчета Последний раз редактировалось DrGrizzly; 06.12.2022 в 15:09. |
06.12.2022, 15:14 | #8 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
Пока получился такой код по переводу целого числа в IEEE754
Код:
Последний раз редактировалось DrGrizzly; 06.12.2022 в 17:13. |
06.12.2022, 15:33 | #9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Ничего странного. Чтобы получить из числа 100 число 200, нужно 100 умножить на 2. Лишняя единичка в экспоненте как раз и дает это умножение.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
06.12.2022, 17:19 | #10 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
Победил похоже!!!)) Проверил на числах 1, 100, 200, 51, результаты совпадают ) Спасибо большое всем!) Код алгоритма обновил. Осталось только добавить работу с дробными числами и отрицательными, если кому понадобится
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Каков диапазон порядка вещественных чисел согласно IEEE 754 Single Precision | MyshleninSA | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 07.03.2018 23:24 |
Сложение чисел IEEE 754 Single. | dan332 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 21.04.2017 18:25 |
IEEE 754 Сложение, вычитание | _PROGRAMM_ | Помощь студентам | 3 | 27.08.2012 09:03 |
Дробное число прописью | taran1 | Microsoft Office Access | 7 | 17.06.2011 15:35 |
Стандарты IEEE | Sam Gold | Обсуждение статей | 2 | 10.03.2011 14:16 |