2014 dxdy logo

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

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




 
 Числа с плавающей запятой
Сообщение28.02.2014, 12:50 
Изучая ассемблер возник вопрос про представление числа с плавающей запятой, сколько читаю про них, к необходимому результату не прихожу. Знаю, число состоит из знака, порядка и мантисы, но везде где ни читал, не сходится к нужному результату или я чего-то не понимаю. У меня есть +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 
В памяти последовательно друг за другом идут сначала знаковый бит, потом порядок, потом мантисса. Эти единицы и есть порядок, увеличенный на 127. Ведь $1,0=1,0\cdot 2^0.$

 
 
 
 Re: Числа с плавающей запятой
Сообщение28.02.2014, 13:38 
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 
Аватара пользователя
Цитата:
Просто 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 
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 
И не сходится? А левую единицу не хотите убрать? И поменять мантиссу с порядком местами.

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

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

 
 
 
 Re: Числа с плавающей запятой
Сообщение03.03.2014, 21:53 
arseniiv в сообщении #832035 писал(а):
И не сходится? А левую единицу не хотите убрать? И поменять мантиссу с порядком местами.

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


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

-- 03.03.2014, 22:54 --

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

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

 
 
 
 Re: Числа с плавающей запятой
Сообщение03.03.2014, 22:45 
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 
arseniiv в сообщении #832410 писал(а):
Не знаю, есть ли на форуме телепаты, чтобы ответить. :-)

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

 
 
 
 Re: Числа с плавающей запятой
Сообщение04.03.2014, 20:12 
Зачем что-то выдумывать? Достаточно прочитать, как представляются 32-битные вещественные числа по стандарту IEEE 754.

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

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

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group