Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
 binary to real  [new]
Mari.P
Member

Откуда: Yekaterinburg
Сообщений: 687
Добрый день, уважаемые профессионалы, не откажите в помощи. Забыла математику.

В контроллере происходит преобразование двоичного значения в аккумуляторе в его вещественный эквивалент с плавающей точкой.
Вопрос - что значит 2 (exp 18). Как из двоичного числа 5 получается такое?
https://www.plcsystems.ru/catalog/DirectLOGIC_2/doc/UM205_RUS.pdf стр 340 или см приложенный файл


Спасибо!

К сообщению приложен файл. Размер - 56Kb
27 ноя 18, 08:54    [21745690]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Число одинарной точности
27 ноя 18, 08:58    [21745691]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Преобразование из целого в представление с плавающей запятой происходит приведением к виду 0.1...*2n, т.е. первый разряд мантиссы должен быть единица.

Например 1001 (двоичное) запишется как 0.1001*10100, т.е. мантисса 0.1001, экспонента 100

При записи в память мантисса записывается без первого разряда, т.к. он всегда 1. Для данного примера так:
0 00000100 0010000...
27 ноя 18, 09:10    [21745699]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Наврал немного, приведение мантиссы к виду 1.xxxxx. И из порядка при записи вычитается 127.
Ссылку почитай.

Для отладки можешь посмотреть в С/C++ как в памяти хранится тип float.
27 ноя 18, 09:20    [21745701]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Mari.P
Member

Откуда: Yekaterinburg
Сообщений: 687
Спасибо большое, прочитала.

Все равно непонятно.
написано, что в мантиссу копируется с 0 по 17 бит включительно, это понятно
0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1

Но вот как из оставшихся бит ( с 18 по 31) они получают число 18? Кто-нибудь может сказать?
0 0 0 0 0 0 0 0 0 0 0 0 0 1
29 ноя 18, 09:28    [21748057]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Там же написано что 127 надо прибавить. На твоей картинке тоже.
Т.е. мантисса получается 127+18 = 145 = 100100012
29 ноя 18, 09:46    [21748076]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Напутал с терминологией
Dima T
Т.е. мантисса порядок получается 127+18 = 145 = 100100012
29 ноя 18, 09:47    [21748081]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Mari.P
Спасибо большое, прочитала.

Все равно непонятно.
написано, что в мантиссу копируется с 0 по 17 бит включительно, это понятно
0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1

Но вот как из оставшихся бит ( с 18 по 31) они получают число 18? Кто-нибудь может сказать?
0 0 0 0 0 0 0 0 0 0 0 0 0 1

Ты похоже совсем не понимашь откуда число 18 появилось - это количество значащих разрядов твоего целого. Оно хранится так:
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1

но если отбросить ведущие нули, то получим
1 0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1

т.е. 19 знаков. После приведения к виду с плавающей запятой, где один разряд остается перед запятой, а 18 после запятой.
1. 0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 * 1018

Вот откуда 18
29 ноя 18, 09:55    [21748093]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Mari.P
Member

Откуда: Yekaterinburg
Сообщений: 687
Все, спасибо, дошло.
Так же 1 стоит в 18 бите, вот тебе это и есть экспонента, туплю.
29 ноя 18, 09:57    [21748098]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
На всякий случай добавлю: т.к. всегда происходит приведение к виду 1.xxx*10xxx, то единица в целой части не пишется.

Т.е. отсюда
1. 0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 * 1018

в мантиссу пишется
0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1
29 ноя 18, 10:04    [21748105]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Mari.P
Member

Откуда: Yekaterinburg
Сообщений: 687
Прошу прощения, а не так разве?
1,xxx * 2^xxxx
29 ноя 18, 10:19    [21748127]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Mari.P
Прошу прощения, а не так разве?
1,xxx * 2^xxxx

так, только 210 это тоже самое что 102

Выше речь была про источник числа 18, поэтому умышленно написал его в десятичном виде, остальная часть записи двоичная.
29 ноя 18, 10:22    [21748133]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Mari.P
Member

Откуда: Yekaterinburg
Сообщений: 687
и кстати пример
https://ru.wikipedia.org/wiki/Число_одинарной_точности

на вики работает странно
union {
float fl;
uint32_t dw;
} f;
int s = ( f.dw >> 31 ) ? -1 : 1; /* Знак */
int e = ( f.dw >> 23 ) & 0xFF; /* Порядок */
int m = /* Мантисса */
e ?
( f.dw & 0x7FFFFF ) | 0x800000 :
( f.dw & 0x7FFFFF ) << 1;

Если fl=2, то
s=0x1 e=0x80 m=0x800000 dw=0x40000000

откуда в 2 ненулевая мантисса?
Калькулятор
https://www.h-schmidt.net/FloatConverter/IEEE754.html
говорит, что ее там нет
29 ноя 18, 10:24    [21748137]     Ответить | Цитировать Сообщить модератору
 Re: binary to real  [new]
Dima T
Member

Откуда:
Сообщений: 15272
Mari.P
и кстати пример
https://ru.wikipedia.org/wiki/Число_одинарной_точности

на вики работает странно
union {
float fl;
uint32_t dw;
} f;
int s = ( f.dw >> 31 ) ? -1 : 1; /* Знак */
int e = ( f.dw >> 23 ) & 0xFF; /* Порядок */
int m = /* Мантисса */
e ?
( f.dw & 0x7FFFFF ) | 0x800000 :
( f.dw & 0x7FFFFF ) << 1;

Если fl=2, то
s=0x1 e=0x80 m=0x800000 dw=0x40000000

откуда в 2 ненулевая мантисса?
Калькулятор
https://www.h-schmidt.net/FloatConverter/IEEE754.html
говорит, что ее там нет

Отсюда
    ( f.dw & 0x7FFFFF ) | 0x800000

я так понимаю авторы этого кода решили вернуть на место 1, которая убирается во время записи 21748105
29 ноя 18, 10:31    [21748145]     Ответить | Цитировать Сообщить модератору
Все форумы / Вопрос-Ответ Ответить