![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
![]()
Всем привет! Второй день бьюсь в поисках решения задачки, получаю из контроллера температуру в 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) |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
![]()
Дак вот в этом и загвоздка. Они дальше ссылаются "То есть, если наша экспоната = +7 (+111 в двоичной)", а ни как не могу понять, от куда эти 111 взялись, понятно что 0111 это 7, но как у них вышло 111 не могу никак дойти до этого момента....
|
![]() |
![]() |
![]() |
#4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Запятую в числе перенесли на 7 двоичных разрядов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Да, только вы лихо отбросили значимые нули: 42С80000.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#8 |
Новичок
Джуниор
Регистрация: 05.12.2022
Сообщений: 6
|
![]()
Пока получился такой код по переводу целого числа в IEEE754
Код:
Последний раз редактировалось DrGrizzly; 06.12.2022 в 17:13. |
![]() |
![]() |
![]() |
#9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Ничего странного. Чтобы получить из числа 100 число 200, нужно 100 умножить на 2. Лишняя единичка в экспоненте как раз и дает это умножение.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#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 |