Показать сообщение отдельно
  #3  
Старый 28.07.2009, 12:52
Serval Serval вне форума
Прохожий
 
Регистрация: 20.01.2009
Сообщения: 18
Репутация: 30
Смущение

сам спросил, сам разобрался - чтобы потом кто-то наткнувшись не пошел искать дальше примеду пример решения.

Преобразование двоичного числа с плавающей точкой в 32 битный формат IEEE754

формула F= (-1)^s*2^(E-127)*(1+M/2^23)

где:
S- бит знака (31 бит)
E- смещенная экспонента (23-30 биты)
M - остаток от мантиссы (0-22 биты)
F- десятичное число с плавающей точкой


Формат числа таков:
старший бит = знак,
8 бит = порядок + 127 (127=смещение),
младшие = мантисса.


берем 42 59 11 c7 и преобразуем в бинарный вид получаем 1000010010110010001000111000111

разбираем полученное

0 10000100 10110010001000111000111 (1бит 8бит 23бита - первый бит=0 поэтому например в калькуляторе его непокажут - отсчитывайте с конца)

0=S - знак "+" (1 это "-")
10000100=132=Е - смещенная экспонента
1011001000100011100011 - мантисса ( Но, у нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1<=M<2. Нет смыла, записывать единицу в отведенные 23 бита, поэтому в отведенные 23 бита записывается остаток от мантиссы.)
дописываем "1", получаем 11011001000100011100011=7112931=M



F= (-1)^s*2^(E-127)*(1+M/2^23)=(-1)^0*2^(132-127)*(1+7112931/2^23)
=1*2^5*(1+7112931/8388608)=1*32*(1,84...)=59,13..... (небуду записывать все знаки)

вот как-то так все и получается.


как это реализавать в коде уже дело отдельное - но думаю это будет несложно
Ответить с цитированием