2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Числа с плавающей запятой
Сообщение28.02.2014, 12:50 


26/11/11
134
Изучая ассемблер возник вопрос про представление числа с плавающей запятой, сколько читаю про них, к необходимому результату не прихожу. Знаю, число состоит из знака, порядка и мантисы, но везде где ни читал, не сходится к нужному результату или я чего-то не понимаю. У меня есть +1.0 я проверил с помощью turbo debager`a как оно будет записано и получил 001111111000...000 в общем после последней единицы около 23-24 нулей. Ну я посмотрел дамп памяти и перевёл из 16ричной в двоичную. Читая теорию я нашёл следующую формулу $(-1)^{s}*(1.m_1,m_2,...,m_{23})*2^{E-127}$ где $m_i$- числа после запятой, s-знак, E- подбирается отталкиваясь от того, что перед запятой еденица. Вот манипулируя с этой формулой, я пришёл лишь к тому, что переведя 127 в двоичную, получается похожее число, если учесть мантису и знак... Так как же получить то, что видит машина?

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение28.02.2014, 13:12 


14/01/11
2677
В памяти последовательно друг за другом идут сначала знаковый бит, потом порядок, потом мантисса. Эти единицы и есть порядок, увеличенный на 127. Ведь $1,0=1,0\cdot 2^0.$

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение28.02.2014, 13:38 


26/11/11
134
Sender в сообщении #831301 писал(а):
В памяти последовательно друг за другом идут сначала знаковый бит, потом порядок, потом мантисса. Эти единицы и есть порядок, увеличенный на 127. Ведь $1,0=1,0\cdot 2^0.$

тут понятно, т.е по той формуле мне надо найти E и его в двоичную перевести чтоли? И всё? А то, что в скобках перевести в двоичную, чтобы узнать сдвиг? Просто 0.5 представляется как 001111110...00. Т.е 0.5 в двоичной это 10, отсюда Е=126, что 01111110. Что также имеет нечто схожее, если прибавить нули мантисы

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение02.03.2014, 12:43 
Аватара пользователя


02/04/11
37
Цитата:
Просто 0.5 представляется как 001111110...00. Т.е 0.5 в двоичной это 10, отсюда Е=126, что 01111110. Что также имеет нечто схожее, если прибавить нули мантисы

$0.5$ это $ (-1)^{S} (1.M)2^{E-127}$, где $S=0, M=0, E=126_{10}=01111110_{2}$. Записывая подряд, получим 001111110...00.

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение02.03.2014, 19:32 


26/11/11
134
alex7851 в сообщении #831912 писал(а):
Цитата:
Просто 0.5 представляется как 001111110...00. Т.е 0.5 в двоичной это 10, отсюда Е=126, что 01111110. Что также имеет нечто схожее, если прибавить нули мантисы

$0.5$ это $ (-1)^{S} (1.M)2^{E-127}$, где $S=0, M=0, E=126_{10}=01111110_{2}$. Записывая подряд, получим 001111110...00.

в данном случае всё нормально, а если я возьму 1.3 к примеру? целая часть будет в двоичной как 10, дробная часть 01001101. И тогда будет записано в двоичной как 10.01001101, E такоеже и получаем 0 1001001101 01111110 (пробелом разделил части числа)

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение02.03.2014, 20:29 
Заслуженный участник


27/04/09
28128
И не сходится? А левую единицу не хотите убрать? И поменять мантиссу с порядком местами.

И нулей явно не хватает кое-где.

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение02.03.2014, 20:35 
Заслуженный участник


28/04/09
1933
В порядке занудства замечу, что обсуждаемая формула справедлива только при работе с нормализованными вещественными числами (по крайней мере, если говорить о вещественной арифметике по стандарту IEEE 754). Помимо нормализованных чисел, есть еще и денормализованные, а также нули, бесконечности и нечисла. Причем каждой твари $\text{---}$ по паре (положительной и отрицательной особи). Все они умещаются в стандартную 32(64, 80, ....)-битную запись, но для их "извлечения" используются другие формулы.

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение03.03.2014, 21:53 


26/11/11
134
arseniiv в сообщении #832035 писал(а):
И не сходится? А левую единицу не хотите убрать? И поменять мантиссу с порядком местами.

И нулей явно не хватает кое-где.


в конце нулей не хватает, понял. Ну похоже, но сверяться с помощью турбодебагера я боюсь пока т.к я пока с ним дружу на такомже уровне, как обезьяна с самолётом. С теми уж точно было верно т.к я сверятлся. А логику я верно понял? Просто привык, что формула даёт какое-то число сразу, при подстановке значений, и если я воспользуюсь этой форме в прямую, то в двоичной системе число будет с минусом, уж как-то это очень бредово

-- 03.03.2014, 22:54 --

EtCetera в сообщении #832039 писал(а):
В порядке занудства замечу, что обсуждаемая формула справедлива только при работе с нормализованными вещественными числами (по крайней мере, если говорить о вещественной арифметике по стандарту IEEE 754). Помимо нормализованных чисел, есть еще и денормализованные, а также нули, бесконечности и нечисла. Причем каждой твари $\text{---}$ по паре (положительной и отрицательной особи). Все они умещаются в стандартную 32(64, 80, ....)-битную запись, но для их "извлечения" используются другие формулы.

С этим я знаком немного

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение03.03.2014, 22:45 
Заслуженный участник


27/04/09
28128
BAHOO в сообщении #832378 писал(а):
А логику я верно понял?
Не знаю, есть ли на форуме телепаты, чтобы ответить. :-)

BAHOO в сообщении #832378 писал(а):
Просто привык, что формула даёт какое-то число сразу, при подстановке значений, и если я воспользуюсь этой форме в прямую, то в двоичной системе число будет с минусом, уж как-то это очень бредово
Какая формула, $(-1)^{S} (1.M)2^{E-127}$? А она единственную тройку $(S, M, E)$ по каждому числу не даёт. Давать будут три формулы $S = \cdots(x), M = \cdots(x), E = \cdots(x)$. Их можно выписать, но лучше обратиться к упомянутому EtCetera стандарту IEEE 754. Там всё чётко.

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение04.03.2014, 20:05 


26/11/11
134
arseniiv в сообщении #832410 писал(а):
Не знаю, есть ли на форуме телепаты, чтобы ответить. :-)

Ну я писал выше как я понял, т.е написать по порядку нуль или еденицу в зависимости от знака, потом целую часть(в двоичной), потом мантису(в двоичной), потом число E в двоичной и дописать нули, исходя из того, что в мантисе 23 знака .

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение04.03.2014, 20:12 
Заслуженный участник


28/04/09
1933
Зачем что-то выдумывать? Достаточно прочитать, как представляются 32-битные вещественные числа по стандарту IEEE 754.

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение04.03.2014, 20:34 
Заслуженный участник


27/04/09
28128
BAHOO в сообщении #832709 писал(а):
потом целую часть(в двоичной), потом мантису(в двоичной)
Стоп-стоп-стоп! Нету никакой «целой части и мантиссы» отдельно. Мантисса вместе с порядком (и знаком) — это части экспоненциальной записи числа, и, т. к. часто удобно нормализовать эту запись, чтобы мантисса была в интервале $[1;\text{основание системы счисления})$, в её целой части остаётся только одна цифра. А для двоичной системы она однозначно определяется как 1. Эта единица целой части — тоже часть мантиссы, но так как её выкидывание позволяет записать ещё один знак мантиссы тем же количеством бит — а это неплохо — описываемые упомянутым стандартом 32-битный и 64-битный форматы чисел с плавающей запятой эту единицу не хранят. В регистрах для вычислений с такими числами обычно больше места (в x87 — 80-битные регистры), там нет причин экономить единицу, и для вычислений её лучше бы иметь явно — и мантисса такого формата уже не состоит только из дробной части.

 Профиль  
                  
 
 Re: Числа с плавающей запятой
Сообщение05.03.2014, 20:43 


26/11/11
134
Теперь точно разобрался) спс)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group