Числа с плавающей запятой в двоичной системе

Числа с плавающей запятой в двоичной системе

Часто приходится обрабатывать очень большие числа (например, расстояние между звёздами) или наоборот очень маленькие числа (например, размеры атомов или электронов). При таких вычислениях пришлось бы использовать числа с очень большой разрядностью. В то же время нам не нужно знать расстояние между звёздами с точностью до миллиметра. Для вычислений с такими величинами числа с фиксированной запятой неэффективны.

В десятичной арифметике для записи таких чисел используется алгебраическая форма. При этом число записывается в виде мантиссы, умноженной на 10 в степени, отображающей порядок числа, Например:

Для записи двоичных чисел тоже используется такая форма записи. Эта форма записи называется запись числа с плавающей точкой. Напомним, что мантисса не может быть больше единицы и после запятой в мантиссе не может записываться ноль.

А теперь рассмотрим промышленные стандарты, используемые для представления чисел в компьютерах. Существует стандарт IEEE 754 для представления чисел с одинарной точностью (float) и с двойной точностью (double). Для записи числа в формате с плавающей запятой одинарной точности требуется тридцатидвухбитовое слово. Для записи чисел с двойной точностью требуется шестидесятичетырёхбитовое слово. Чаще всего числа хранятся в нескольких соседних ячейках памяти процессора. Форматы числа в формате с плавающей запятой одинарной точности и числа в формате с плавающей запятой удвоенной точности приведены на рисунке

Стандарт IEEE 754-1985 определяет:

как представлять нормализованные положительные и отрицательные числа с плавающей точкой

как представлять денормализованные положительные и отрицательные числа с плавающей точкой

как представлять нулевые числа

как представлять специальную величину бесконечность (Infiniti)

как представлять специальную величину "Не число" (NaN или NaNs)

четыре режима округления

Ieee 753-1985 определяет четыре формата представления чисел с плавающей запятой:

с одинарной точностью (single-precision) 32 бита

с двойной точностью (double-precision) 64 бита

с одинарной расширенной точностью (single-extended precision) >=43 бит (редко используемый)

с двойной расширенной точностью (double-extended precision) >= 79 бит (обычно используют 80 бит)

Основное применение в технике и программирование получили форматы 32 и 64 бита. Например в основных логических языках VB и С используют типы данных single и double (double является увеличенной копией single).

Формальное представление нормализованных чисел в формате ieee 754.

Рис. 1 Представление формата числа в стандарте IEEE 754

S — знак числа S=0 — положительное число; S=1 — отрицательное число

E – смещенный порядок (экспонента) числа; exp = E — 2^(b-1) + 1 , где exp — экспонента двоичного нормализованного числа с плавающей точкой , 2^(b-1)-1 — смещение экспоненты. Смещение требуется, чтобы не вводить в число еще один знак. Смещённый порядок всегда положительное число. Для одинарной точности для порядка выделено восемь бит. Для смещённого порядка двойной точности отводится 11 бит. Для одинарной точности смещение принято 127, а для двойной точности – 1023.

Далее пойдут биты экспоненты, для этого выделим 1 байт (8 бит), но экспонента тоже может быть +/- Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавим смещение к экспоненте +127(0111 1111 — это половина пространства отведенного под экспоненту). То есть, если наша экспоната = +7 (+111 в двоичной), то смещенная экспонента = 7+127=134. А если бы наша экспонента была -7 , то смещенная экспонета=127-7 =120. Смещенную экспоненту мы и будем записывать в отведенные 8 бит. При этом, когда нам будет нужно получить экспоненту, мы просто отнимем 127 от этого байта.

Читайте также:  Переводчик с исправлением грамматических ошибок

M — остаток мантиссы двоичного нормализованного числа с плавающей точкой. В десятичной мантиссе после запятой могут присутствовать цифры 1. 9, а в двоичной — только 1 (нормализованная мантисса). Поэтому для хранения единицы после двоичной запятой не выделяется отдельный бит в числе с плавающей запятой. Единица подразумевается, как и двоичная запятая. Кроме того, в формате чисел с плавающей запятой принято, что мантисса всегда больше 1. То есть диапазон значений мантиссы лежит в диапазоне от 1 до 2.

1) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000001 01001000 00000000 00000000

— Знаковый бит, равный 1 показывает, что число отрицательное.

— Экспонента 10000010 в десятичном виде соответствует числу 130. Вычтя число 127 из 130, получим число 3.

— Теперь запишем мантиссу: 1,100 1000 0000 0000 0000 0000

— И, наконец, определим десятичное число: 1100,1b = 12,5

2) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000011 00110100 00000000 00000000

— Знаковый бит, равный 1 показывает, что число отрицательное.

— Экспонента 10000110 в десятичном виде соответствует числу 134. Вычтя число 127 из 134, получим число 7.

— Теперь запишем мантиссу: 1,011 0100 0000 0000 0000 0000

— И, наконец, определим десятичное число: 10110100b=180

Правила ввода чисел

  1. Числа в десятичной системе счисления могут вводиться как без дробной, так и с дробной частью ( 234234.455 ).
  2. Числа в двоичной системе счисления состоят только из цифр 0 и 1 ( 10100.01 ).
  3. Числа в шестнадцатеричной системе счисления состоят из цифр 0 . 9 и букв A . F .
  4. Можно также получать обратное представление кода (из шестнадцатеричной системы счисления в десятичную, 40B00000 )

Пример №2 . Представить двоичное число 101.102 в нормализованном виде, записать в 32-битом стандарте IEEE754.
Решение.
Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде.
Сдвинем число на 2 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1.011
Экспонента exp2=2
Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754.
Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 2 + 127 = 129
Переведем экспоненту в двоичное представление.
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M 22 *0 + 2 21 *1 + 2 20 *1 + 2 19 *0 + 2 18 *0 + 2 17 *0 + 2 16 *0 + 2 15 *0 + 2 14 *0 + 2 13 *0 + 2 12 *0 + 2 11 *0 + 2 10 *0 + 2 9 *0 + 2 8 *0 + 2 7 *0 + 2 6 *0 + 2 5 *0 + 2 4 *0 + 2 3 *0 + 2 2 *0 + 2 1 *0 + 2 0 *0 = 0 + 2097152 + 1048576 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 3145728
В десятичном коде мантисса выражается числом 3145728
В результате число 101.10 представленное в IEEE 754 c одинарной точностью равно 01000000101100000000000000000000.
Переведем в шестнадцатеричное представление.
Разделим исходный код на группы по 4 разряда.
010000001011000000000000000000002 = 0100 0000 1011 0000 0000 0000 0000 0000 2
Получаем число:
0100 0000 1011 0000 0000 0000 0000 0000 2 = 40B0000016

Читайте также:  Гугл почта установить на рабочий стол

Часто приходится обрабатывать очень большие числа (например, расстояние между звёздами) или наоборот очень маленькие числа (например, размеры атомов или электронов). При таких вычислениях пришлось бы использовать числа с очень большой разрядностью. В то же время нам не нужно знать расстояние между звёздами с точностью до миллиметра. Для вычислений с такими величинами числа с фиксированной запятой неэффективны.

В десятичной арифметике для записи таких чисел используется алгебраическая форма. При этом число записывается в виде мантиссы, умноженной на 10 в степени, отображающей порядок числа, Например:

0,2×10 5 ;
0,16×10 -38

Для записи двоичных чисел тоже используется такая форма записи. Она позволяет работать с числами с большим диапазоном значений Эта форма записи называется запись числа с плавающей точкой. Напомним, что мантисса не может быть больше единицы и после запятой в мантиссе не можетзаписываться ноль.

В программировании для записи таких чисел используются специальные форматы переменных. В языке СИ это такие форматы как float и double. Они описываются стандартом . Этих же стандартов придерживается большинство других языков программирования. При работе с числами с плавающей запятой в составе языка программирования обычно не возникает трудностей. Все преобразования форматов чисел осуществляются средствами самого языка программирования. Однако при передаче данных или при работе с микроконтроллерами часто приходится писать программу на языке программирования ассемблер и тогда может потребоваться знание внутреннего представления этих чисел.

Для записи числа в формате с плавающей запятой одинарной точности требуется тридцатидвухбитовое слово. Для записи чисел с двойной точностью требуется шестидесятичетырёхбитовое слово. Чаще всего числа хранятся в нескольких соседних ячейках памяти процессора. Форматы числа в формате с плавающей запятой одинарной точности и числа в формате с плавающей запятой удвоенной точности приведены на рисунке


Рисунок 1. Форматы числа с плавающей запятой

На рисунке буквой S обозначен знак числа, 0 — это положительное число, 1 — отрицательное число.

Группа бит, обозначенная e предназначена для записи смещённого порядка числа. Смещение потребовалось, чтобы не вводить в двоичный код числа с плавающей запятой еще один знак. Смещённый порядок всегда является положительным числом. В двоичном коде одинарной точности float для записи порядка числа выделено восемь бит. Для него смещение порядка числа принято 127. Для смещённого порядка в двоичном коде числа с плавающей запятой двойной точности double отводится 11 бит. В нем смещение порядка числа составляет — 1023.

В десятичной мантиссе после запятой могут присутствовать цифры 1. 9, а в двоичной — только 1. Поэтому для хранения единицы после двоичной запятой не выделяется отдельный бит в числе с плавающей запятой. Единица подразумевается, как и двоичная запятая. Кроме того, в формате чисел с плавающей запятой принято, что мантисса всегда больше 1. То есть диапазон значений мантиссы лежит в диапазоне от 1 до 2.

Читайте также:  Скайп звук есть но не слышу собеседника

Рассмотрим несколько примеров:

1) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000001 01001000 00000000 00000000

— Знаковый бит, равный 1 показывает, что число отрицательное.

— Экспонента 10000010 в десятичном виде соответствует числу 130. Вычтя число 127 из 130, получим число 3.

— Теперь запишем мантиссу: 1,100 1000 0000 0000 0000 0000

— И, наконец, определим десятичное число: 1100,1b = 12,5d

2) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000011 00110100 00000000 00000000

— Знаковый бит, равный 1 показывает, что число отрицательное.

— Экспонента 10000110 в десятичном виде соответствует числу 134. Вычтя число 127 из 134, получим число 7.

— Теперь запишем мантиссу: 1,011 0100 0000 0000 0000 0000

— И, наконец, определим десятичное число: 10110100b=180d

Для того чтобы записать ноль, в двоичном представлении числа с плавающей запятой достаточно записать в смещенный порядок число 00000000b. Значение мантиссы при этом не имеет значения. Число, в котором все байты равны 0, тоже попадает в этот диапазон значений.

Бесконечность в числе с плавающей запятой соответствует смещенному порядку 11111111b и мантиссе, равной 1,0. При этом существует минус бесконечность и плюс бесконечность (переполнение и антипереполнение), которые часто отображаются на экран монитора компьютера или дисплей микропроцессорного устройства как +INF и -INF.

Все остальные комбинации битов мантиссы числа с плавающей запятой (в том числе и все единицы) при смещенном порядке 11111111b воспринимаются языками программирования как не числа и отображаются на экран: NaN.

  1. IEEE 754
  2. Число с плавающей запятой wikipedia
  3. Разработка → Что нужно знать про арифметику с плавающей запятой https://habrahabr.ru/
  4. Представление вещественных чисел http://neerc.ifmo.ru/

Другие виды двоичных кодов:

Целочисленные двоичные коды Представление двоичных чисел в памяти компьютера или микроконтроллера
https://digteh.ru/proc/IntCod.php

Двоично-десятичный код Иногда бывает удобно хранить числа в памяти процессора в десятичном виде
https://digteh.ru/proc/DecCod.php

Запись текстов двоичным кодом Представление текстов в памяти компьютеров и микроконтроллеров
https://digteh.ru/proc/text.php

Системы счисления В настоящее время и в технике и в быту широко используются как позиционные, так и непозиционные системы счисления.
https://digteh.ru/digital/SysSchis.php

Автор Микушин А. В. All rights reserved. 2001 . 2019

Предыдущие версии сайта:
http://neic.nsk.su/

Об авторе:
к.т.н., доц., Александр Владимирович Микушин

Кандидат технических наук, доцент кафедры САПР СибГУТИ. Выпускник факультета радиосвязи и радиовещания (1982) Новосибирского электротехнического института связи (НЭИС).

А.В.Микушин длительное время проработал ведущим инженером в научно исследовательском секторе НЭИС, конструкторско технологическом центре "Сигнал", Научно производственной фирме "Булат". В процессе этой деятельности он внёс вклад в разработку систем радионавигации, радиосвязи и транкинговой связи.

Научные исследования внедрены в аппаратуре радинавигационной системы Loran-C, комплексов мобильной и транкинговой связи "Сигнал-201", авиационной системы передачи данных "Орлан-СТД", отечественном развитии системы SmarTrunkII и радиостанций специального назначения.

Ссылка на основную публикацию
Чем мобильное приложение лучше сайта
Согласно последним данным, ежегодный прирост мобильной экономики составляет 10%, и уже около 20% всех продаж через ПК осуществляются после клика...
Футбольный менеджер без интернета
Да, уже четыре года назад Испания выиграла Евро 2012. С того времени много воды утекло и теперь у других команд...
Футбольный менеджер с реальными командами
Бесплатная онлайн игра. Только в нашем футбольном менеджере игры проходят в реальном времени и можно менять тактику непосредственно во время...
Чем можно заменить майл агент
Альтернативы Mail.Ru Агент Обзоры и новости о Mail.Ru Агент 2015. Mail.Ru Агент уступит место ICQ Оба популярных российских мессенджера Mail.ru...
Adblock detector