Перевести число 112 из десятичной системы в двоичную
Задача: перевести число 112 из десятичной системы счисления в двоичную.
Для того, чтобы перевести число 112 из десятичной системы счисления в двоичную, необходимо осуществить последовательное деление на 2, то тех пор пока остаток не будет меньше чем 2.
— | 112 | 2 | ||
112 | — | 56 | 2 | |
0 | 56 | — | 28 | 2 |
0 | 28 | — | 14 | 2 |
0 | 14 | — | 7 | 2 |
0 | 6 | — | 3 | 2 |
1 | 2 | 1 | ||
1 |
Полученные остатки записываем в обратном порядке, таким образом:
Подробнее о том, как переводить числа из десятичной системы в двоичную, смотрите здесь.
Другие переводы числа 112:
- Перевести 112 из восьмеричной в десятичную с/с
- Перевести 112 из десятичной в восьмеричную с/с
- Перевести 112 из десятичной в шестнадцатеричную с/с
- Перевести 112 из шестнадцатеричной в двоичную с/с
- Перевести 112 из восьмеричной в двоичную с/с
- Перевести 112 из шестнадцатеричной в десятичную с/с
- Перевести 112 из 4 в двоичную с/с
- Перевести 112 из 1 в десятичную с/с
- Перевести 112 из троичной в восьмеричную с/с
- Перевести 112 из троичной в десятичную с/с
- Перевести 112 из 1 в десятичную с/с
- Перевести 112 из девятеричной в восьмеричную с/с
- Перевести 112 из восьмеричной в шестнадцатеричную с/с
- Перевести 112 из десятичной в шестеричную с/с
Смотрите также:
- Смотрите также
- Калькуляторы
- Последние переводы
Полезные материалы
- Что такое системы счисления в информатике?
- Что такое позиционная система счисления?
- Как переводить числа из десятичной в двоичную систему?
Калькуляторы переводов
- Калькулятор переводов из десятичной в двоичную систему с решением
- Калькулятор переводов из десятичной в восьмеричную систему с решением
- Калькулятор переводов из шестнадцатеричной в десятичную систему с решением
- Калькулятор переводов из двоичной в восьмеричную систему с решением
- Калькулятор переводов из одной системы счисления в другую
Последние примеры переводов из 10-ой в 2-ую систему
- Представить десятичное число 26645 в двоичной системе
- Перевести десятичное число 153.375 в двоичную систему счисления
- Перевести 578.55 из десятичной в двоичную систему
- Какое десятичное число соответствует двоичному числу 501242?
- Переведите десятичное число 46.5625 в двоичную систему
- Переведите 984765 из десятичной в двоичную систему счисления
- Как представлено число 01010101010 в двоичной системе счисления?
- Запишите десятичное число 207.685 в двоичной системе счисления
- Перевод числа 5211 из десятичной в двоичную систему счисления
- Какому десятичному числу соответствует двоичное число 2910?
Число 112 в двоичном коде
Объяснение конвертации десятичного числа 112 в двоичное
Этапы конвертации десятичного числа в двоичное:
- Шаг 1: Разделите десятичное число на 2, получите остаток и частное от деления.
- Шаг 2: Переведите остаток от деления в двоичную цифру (двоичная цифра равна остатку).
- Шаг 3: Повторяйте данные шаги, используйте частное от деления, пока оно не станет равно 0.
Таблица конвертации десятичного числа 112 в двоичное
Деление на 2 | Частное от деления | Остаток (Двоичная цифра) | Позиция бита |
---|---|---|---|
112 ÷ 2 | 56 | 0 | 0 |
56 ÷ 2 | 28 | 0 | 1 |
28 ÷ 2 | 14 | 0 | 2 |
14 ÷ 2 | 7 | 0 | 3 |
7 ÷ 2 | 3 | 1 | 4 |
3 ÷ 2 | 1 | 1 | 5 |
1 ÷ 2 | 0 | 1 | 6 |
(112)10 = (1110000)2
Похожие расчеты
- 1110000 в десятичное
- Число 112 — вся информация о числе
- Делители числа 112
- Простые множители числа 112
- 112 в виде обыкновенной дроби
- 112 в шестнадцатеричной системе
- 112 в двоичной системе
- 112 римскими цифрами
Поделитесь текущим расчетом
https://calculat.io/ru/number/dec-to-bin/112
О калькуляторе «Число в двоичное»
Данный калькулятор поможет конвертировать десятичные числа в двоичные. Например, он может помочь узнать сколько будет число 112 в двоичной системе? (Ответ: 1110000). Введите число (например ‘112’) и нажмите кнопку ‘Конвертировать’.
6. Чётные числа в двоичной системе всегда оканчиваются на 0, а нечётные – на 1.
При выполнении арифметических операций в ЭВМ применяют специальные коды для представления чисел: прямой, обратный и дополнительный коды чисел.
Прямой код двоичного числа – это само двоичное число.
Обратный код положительного числа совпадает с прямым, а при записи отрицательного числа все его цифры, кроме цифры, изображающей знак числа, заменяются на противоположные (0 заменяется на 1, а 1 – на 0).
Пример: Дано число X=-1011. Перевести число в обратный код. Хобр=1.0100
Дополнительный код положительного числа совпадает с прямым, а код отрицательного числа образуется как результат увеличения на 1 его обратного кода.
Пример: Дано число X=-1011. Перевести в дополнительный код. Хдоп=1.0101
11. Варианты заданий с решением
1. Дано: ,
. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству
?
Решение:При переводеaиbв двоичное представление, получим:a=AA16 =101010102 ,b=2558 =101011012 . Отсюда следует, что подходит значение 101011002,
2. Чему равна сумма чисел 718 и 1F16?
Решение:Надо представить числа в двоичном виде и поразрядно сложить:
718=1110012каждая цифра в 8-ой системе представляется 3-мя битами, 1F16=111112каждая цифра в 16-ой системе представляется 4-мя битами.(Представление 8-х и 16-х чисел в двоичном виде надо знать!)
Полученное двоичное число представим в 8-м и 16-м виде: 10110002=5816=1308 =8810.
3. Для передачи по каналу связи сообщения, состоящего только из символов А, Б, В и Г используется посимвольное кодирование: А-0, Б-11, В-100, Г-011. Через канал связи передается сообщение: ГБАВАВГ. Закодируйте сообщение данным кодом. Полученную двоичную последовательность переведите в восьмеричный код.
1) DBACACD2) 75043 3) 7A23 4) 3304043
Решение:Заменяя в сообщении буквы на соответствующий код, получим следующую последовательность:
0111101000100011. Разобьем эту последовательность на триады справа налево: 111 101 000 100 011, представив каждую триаду в виде 8-го числа, получим: 75043
4. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 26, запись которых в троичной системе счисления оканчивается на 22?
Решение: Для решения задачи достаточно рассмотреть следующие числа в троичной системе счисления: 223, 1223, 2223 и перевести их в десятичную систему счисления:
5. Сколько единиц в двоичной записи десятичного числа 513?
1) 5 2) 2 3) 3 4) 4
Решение: 513=512+1 => 512=2 9 = 10000000002 => 513= 10000000002 +1=10000000012
6. Сколько значащих нулей в двоичной записи числа 254?
1) 1 2) 2 3) 4 4) 8
Решение: 254=255 — 1 => 255=2 8 -1=111111112 – 1=111111102
7. Для хранения целого числа со знаком используется один байт. Сколько единиц содержит внутреннее представление числа (-78)?
1) 3 2) 4 3) 5 4) 6
- переводим число 78 в двоичную систему счисления:
78 = 64 + 8 + 4 + 2 = 2 6 + 2 3 + 2 2 + 2 1 = 10011102
- по условию число занимает в памяти 1 байт = 8 бит, поэтому нужно представить число с помощью 8 разрядов, причем старший разряд — знаковый
- в прямом коде число будет представлено в виде:
110011102
- делаем инверсию битов (заменяем везде, кроме знакового разряда, 0 на 1 и 1 на 0) и получим число в обратном коде:
110011102 → 101100012
- добавляем к результату единицу и получим число в дополнительном коде:
101100012 + 1 = 101100102
- в записи этого числа 4 единицы
Ответ: 2 8. Запись числа 6710 в системе счисления с основанием N оканчивается на 1 и содержит 4 цифры. Чему равно основание этой системы счисления N? Решение 1: Начнем с двоичной системы. Для хранения числа 67 необходимо 7 цифр, т.к. 6410 в троичную систему. Но полный перевод делать не надо, т.к. нас интересует только первый остаток, на него и будет оканчиваться 67 в троичной системе. 67| 36 22 7 6 1 Остаток равен 1. Следовательно, и второе условие выполнено, поэтому троичная система подходит. Основание троичной системы равно 3. Ответ:3 Решение 2:Так как запись в системе счисления с основанием N заканчивается на 1, то остаток от деления числа 67 на N равен 1. Таким образом можно записать, что при некотором целом:
Из последнего выражения видно, что N (основание системы счисления) является делителем числа 66. Делителями числа 66 являются следующие натуральные числа: 2, 3,6, 11, 22, 33, 66. Но нам известно, что запись числа содержит 4 цифры, то есть
Выпишем кубы и четвертые степени первых натуральных чисел, которые являются делителями числа 66:
Видно, что из этого списка только для числа N = 3 выполняется условие
. Таким образом, ответ – 3. Проверим это, переведя число 67 в троичную систему: 6710= 21113Ответ:3 9. Все 5-буквенные слова, составленные из букв А, О, У, записаны в алфавитном порядке. Вот начало списка: 1.ААААА 2.ААААО 3.ААААУ 4.АААОА …… Запишите слово, которое стоит на 240-м месте от начала списка. Решение: Из списка видно, что используются только символы: «А», «О», «У». Пусть «А»=0, «О»=1, «У»=2. Список после замены станет таким:
- 00000
- 00001
- 00002
- 00010
Видно, что это числа, идущие по порядку от нуля в троичной системе. В десятичной системе счисления список бы был таким: 0, 1 , 2, 3. Нам нужно найти, какое число будет стоять на 240 месте. Т.к. список чисел начинается с нуля, следовательно, нам нужно перевести число 239 в троичную систему счисления. Получим число: 222123. Переведем обратно в символы: УУУОУ. Ответ: УУУОУ 10. В таблице ниже представлена часть кодовой таблицы ASCII:
Символ | 1 | 5 | A | B | Q | a | b |
Десятичный код | 49 | 53 | 65 | 66 | 81 | 97 | 98 |
Шестнадцатеричный код | 31 | 35 | 41 | 42 | 51 | 61 | 62 |
Каков шестнадцатеричный код символа “q” ? Решение: Q-A=81-65=16 => q-a=16 => q-97=16 => q=97+16=113 => 11310 =7116 113| 16112 7 1 Ответ: 71 11. Решите уравнение . Ответ запишите в шестеричной системе счисления. Основание системы счисления указывать не нужно. Решение:Надо перевести все числа в десятичную систему, решить уравнение и результат перевести в шестеричную систему: 1)
- из уравнения
получаем
- переводим 15 в шестеричную систему счисления:
Ответ: 23 12. Запись десятичного числа в системах счисления с основаниями 3 и 5 в обоих случаях имеет последней цифрой 0. Какое минимальное натуральное десятичное число удовлетворяет этому требованию? Решение:если запись числа в системе счисления с основанием N заканчивается на 0, то это число делится на N нацело, поэтому в данной задаче требуется найти наименьшее натуральное число, которое делится одновременно на 3 и на 5, то есть это число15. Ответ:15 13. Укажите, сколько всего раз встречается цифра 2 в записи чисел 10, 11, 12, …, 17 в системе счисления с основанием 5. Решение (вариант 1):При решении задачи надо помнить, что в 5-ой системе счисления самая старшая цифра – 4. Запишем первое и последнее число в заданном диапазоне в системе счисления с основанием 5: 10 = 205, 17 = 325 . Оба они содержат цифру 2, так что, 2 цифры мы уже нашли. Между 205 и 325 есть еще числа: 215, 225, 235, 245, 305, 315. В них 5 цифр 2 (в числе 225 – сразу две двойки), поэтому всего цифра 2 встречается 7 раз. Ответ: 7 Решение (вариант 2): Можно перевести все указанные числа в систему счисления с основанием 5 и подсчитать количество 2: 10 = 205, 11 = 215, 12 = 225, 13 = 235, 14 = 245, 15 = 305, 16 = 315, 17 = 325 . Получается 7 штук. Ответ: 7 14. Укажите наименьшее основание системы счисления, в которой запись числа 30 трехзначна. Решение (вариант 1):Обозначим черезнеизвестное основание системы счисления, тогда запись числа 30 в этой системе имеет вид:
Любое число в позиционной системе счисления можно представить в виде многочлена по основанию системы счисления:
По условию задачи запись числа трехзначная, т.е.
, поэтому:
Из неравенства видно, что подходят только два числа для N – 4 и 5:
Минимальное из этих значений – 4. Ответ: 4 Решение (вариант 2):Так как число по условию трехзначное, то достаточно найти первое целое число, куб которого больше 30; это — 4, так как:
Так как
, следовательно, в системе счисления с основанием 4 запись числа 30 трехзначна. Ответ: 4 15. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 30, запись которых в системе счисления с основанием 5 начинается на 3? Решение (вариант 1):Сначала определим, сколько цифр может быть в этих числах, записанных в системе счисления с основанием 5. Так как
, в интересующих нас числах может быть от 1 до 3 цифр. Трехзначные числа, начинающиеся на 3 в системе с основанием 5 можно представить:
Все они заведомо не меньше
, поэтому в наш диапазон не попадают. Таким образом, остается рассмотреть только однозначные и двухзначные числа. Есть всего одно однозначное число, начинающееся на 3, это 3. Общий вид всех двузначных чисел, начинающихся на 3 в системе с основанием 5:
, где
– целое число из множества (поскольку система счисления имеет основание 5 и цифр, больших 4, в записи числа быть не может). Используя эту формулу, находим интересующие нас двузначные числа – 15, 16, 17, 18 и 19. Ответ: 3, 15, 16, 17, 18, 19 Решение (вариант 2):Поскольку
, в интересующих нас числах может быть не более 2 цифр (все трехзначные пятеричные числа, начинающиеся с 3, больше 30). Есть всего одно однозначное число, начинающееся на 3, это 3. Выпишем все пятеричные двузначные числа, которые начинаются с 3, и переведем их в десятичную систему: 305= 15, 315= 16, 325= 17, 335= 18 и 345= 19. Ответ: 3, 15, 16, 17, 18, 19 16. Чему равно наименьшее основание позиционной системы счисления
, при котором 225x= 405y? Ответ записать в виде целого числа. Решение:Поскольку в левой и в правой частях есть цифра 5, оба основания больше 5, то есть перебор имеет смысл начинать с
. Для каждого «подозреваемого»
вычисляем значение
и решаем уравнение
, причем, нас интересуют только натуральные
. Для
и
нужных решений нет, а для
получаем
так что
. Ответ: 8 17. Даны 4 числа, они записаны с использованием различных систем счисления. Укажите среди этих чисел то, в двоичной записи которого содержится ровно 6 единиц. Если таких чисел несколько, укажите наибольшее из них. 1) 6310 * 4102) F816 + 1103) 33384) 111001112Решение:Нужно перевести все заданные числа в двоичную систему, подсчитать число единиц и выбрать наибольшее из чисел, в которых ровно 6 единиц. Для первого варианта переведем оба сомножителя в двоичную систему: 6310 = 1111112 410 = 1002 В первом числе ровно 6 единиц, умножение на второе добавляет в конец два нуля: 6310 * 410 = 1111112 * 1002 = 111111002 то есть в этом числе 6 единиц. Для второго варианта воспользуемся связью между шестнадцатеричной и двоичной системами счисления: каждую цифру шестнадцатеричного числа можно переводить отдельно в тетраду (4 двоичных цифры): F16 = 11112 816 = 10002 F816 = 1111 10002 после добавления единицы F816 + 1 = 1111 10012 также получаем число, содержащее ровно 6 единиц, но оно меньше, чем число в первом варианте ответа. Для третьего варианта используем связь между восьмеричной и двоичной системами: каждую цифру восьмеричного числа переводим отдельно в триаду (группу из трёх) двоичных цифр: 3338 = 011 011 0112 = 110110112 это число тоже содержит 6 единиц, но меньше, чем число в первом варианте ответа. Последнее число 111001112 уже записано в двоичной системе, оно тоже содержит ровно 6 единиц, но меньше первого числа Таким образом, все 4 числа, указанные в вариантах ответов содержат ровно 6 единиц, но наибольшее из них – первое Ответ: 1 18. Даны 4 целых числа, записанные в двоичной системе: 10001011, 10111000, 10011011, 10110100. Сколько среди них чисел, больших, чем А416 +208? 1) 1 2) 2 3) 3 4) 4 Решение:Надо перевести А416+208 в двоичную систему счисления, разложив их по тетрадам для 16-х чисел и по триадам для 8-х чисел: А416— 101001002и 208— 100002и поразрядно сложить: 101001002+ 100002= 101101002. Сравнив с заданными числами, видим, что только одно число больше полученного, это: 10111000. Ответ: 1 19. Найти сумму восьмеричных чисел 178 +1708 +17008 +. +17000008, перевести в 16-ую систему счисления. Найдите в записи числа, равного этой сумме, третью цифру слева. Решение:Несложно выполнить прямое сложение восьмеричных чисел, там быстро обнаруживается закономерность: 178+ 1708= 2078178+ 1708+ 17008= 21078178+ 1708+ 17008+ 170008= 211078178+ 1708+ 17008+ 170008+ 1700008= 2111078178+ 1708+ 17008+ 170008+ 1700008+ 17000008= 21111078 Переведем последнюю сумму через триады в двоичный код (заменяем каждую восьмеричную цифру на 3 двоичных): 100010010010010001112 Теперь разбиваем цепочку на тетрады (группы из 4-х двоичных цифр), начиная справа, и каждую тетраду представляем в виде шестнадцатеричной цифры 8924716 Третья цифра слева: 2. Ответ: 2 20. В системе счисления с некоторым основанием число 17 записывается в виде 122. Укажите это основание. Решение: Обозначим искомое основание системы счисления через x, тогда можно записать выражение: 17 = x 2 +2 x+2 или x 2 +2 x-15 = 0. Решив это уравнение, получим x=3. Ответ: 3
Представление вещественных чисел
Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые знак (англ. sign), порядок (англ. exponent) и мантиссу (англ. mantis). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа ( [math]0[/math] — если число положительное, [math]1[/math] — если число отрицательное). При этом порядок записывается как целое число в коде со сдвигом, а мантисса — в нормализованном виде, своей дробной частью в двоичной системе счисления. Вот пример такого числа из [math]16[/math] двоичных разрядов:
Знак | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок | Мантисса | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
14 | 10 | 9 | 0 |
Знак — один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:
[math](-1)^S \times M \times B^E[/math] , где [math]S[/math] — знак, [math]B[/math] — основание, [math]E[/math] — порядок, а [math]M[/math] — мантисса. Десятичное число, записываемое как [math] ReE[/math] , где [math]R[/math] — число в полуинтервале [math][1; 10)[/math] , [math]E[/math] — степень, в которой стоит множитель [math]10[/math] ; в нормализированной форме модуль [math]R[/math] будет являться мантиссой, а [math]E[/math] — порядком, а [math]S[/math] будет равно [math]1[/math] тогда и только тогда, когда [math]R[/math] принимает отрицательное значение. Например, в числе [math]-2435e9[/math]
- [math]S[/math] [math]=[/math] [math]1[/math]
- [math]B[/math] [math]=[/math] [math]10[/math]
- [math]M[/math] [math]=[/math] [math]2435[/math]
- [math]E[/math] [math]=[/math] [math]9[/math]
Порядок также иногда называют экспонентой или просто показателем степени.
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.
Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда [math]X[/math] бит и на дробную отводится всегда [math]Y[/math] бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.
Нормальная и нормализованная форма
Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [math][0; 1)[/math] . Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, [math]00001[/math] можно записать в 4 формах — [math]00001 \times 10[/math] [math]0[/math] , [math]0001 \times 10[/math] [math]−1[/math] , [math]001 \times 10[/math] [math]−2[/math] , [math]01 \times 10[/math] [math]−3[/math] ), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от [math]1[/math] (включительно) до [math]10[/math] (не включительно), а мантисса двоичного числа принимает значения от [math]1[/math] (включительно) до [math]2[/math] (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме [math]0[/math] ) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа [math]0[/math] (а заодно и некоторых других полезных чисел, таких как [math]-\infty[/math] и [math]+\infty[/math] ). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен « [math]1[/math] », то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем [math]2[/math] (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).
Типы чисел с плавающей точкой (по IEEE 754)
Число половинной точности (Binary16, Half precision)
Число́ полови́нной то́чности — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — [math]16[/math] бит или [math]2[/math] байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.
Знак | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок | Мантисса | |||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
14 | 10 | 9 | 0 |
Порядок записан со сдвигом [math]-15[/math] . То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле [math]2^-1[/math] , где [math]b[/math] — число бит, отведенное на хранение порядка (в случае числа половинной точности [math]b=5[/math] ).
Ограничения точности
- Целые от нуля до [math]2048[/math] передаются как есть.
- Целые от [math]2049[/math] до [math]4096[/math] округляются к ближайшему чётному целому.
- Целые от [math]4097[/math] до [math]8192[/math] округляются до ближайшего целого, делящегося нацело на четыре.
- Целые от [math]8193[/math] до [math]16384[/math] округляются до ближайшего целого, делящегося на восемь.
- Целые от [math]16385[/math] до [math]32768[/math] округляются до ближайшего целого, делящегося на шестнадцать.
- Целые от [math]32769[/math] до [math]65535[/math] округляются до ближайшего целого, делящегося на тридцать два.
Число одинарной точности (Binary32, Single precision, float)
Число́ одина́рной то́чности — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — [math]32[/math] бита или [math]4[/math] байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.
Знак | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок (8 бит) | Мантисса (23+1 бита) | |||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
30 | 23 | 22 | 0 |
Порядок записан со сдвигом [math]-127[/math] .
Число двойной точности (Binary64, Double precision, double)
Число́ двойно́й то́чности — компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — [math]64[/math] бита или [math]8[/math] байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.
Знак | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок (11 бит) |
Мантисса (52+1 бит) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
62 | 52 | 51 | 0 |
Порядок записан со сдвигом [math]-1023[/math] .
Число четверной точности (Binary128, Quadruple precision)
Число́ четверно́й то́чности — компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — [math]128[/math] бит или [math]16[/math] байт). Используется в случае необходимости крайне высокой точности.
Знак | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок (15 бит) |
Мантисса (112+1 бит) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
126 | 112 | 111 |
Мантисса (112+1 бит) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 |
Порядок записан со сдвигом [math]-16383[/math] .
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью). В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.
Диапазон значений чисел с плавающей запятой
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, «не число», получается как результат операций типа деления нуля на ноль) и [math]\pm\infty[/math] .
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования денормализованных чисел.
Название в IEEE 754 | Название типа переменной в Си | Диапазон значений | Бит в мантиссе | Бит на переменную |
---|---|---|---|---|
Half precision | — | 6,10×10 -5 ..65504 | 11 | 16 |
Single presicion | float | -3,4×10 38 ..3,4×10 38 | 23 | 32 |
Double precision | double | -1,7×10 308 ..1,7×10 308 | 53 | 64 |
Extended precision | На некоторых архитектурах (например в сопроцессоре Intel) long double | -3,4×10 4932 ..3,4×10 4932 | 65 | 80 |
Особые значения чисел с плавающей точкой
Ноль (со знаком)
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка — число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.
Знак | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок | Мантисса | ||||||||||||||||
0 /1 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | = [math]\pm0[/math] |
14 | 10 | 9 | 0 |
Арифметика нуля со знаком
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:
- [math]\frac< \left| x \right| >= -0\,\![/math] (если [math]x\ne0[/math] )
- [math](-0) \cdot (-0) = +0\,\![/math]
- [math]\left| x \right| \cdot (-0) = -0\,\![/math]
- [math]x + (\pm 0) = x\,\![/math]
- [math](-0) + (-0) = -0\,\![/math]
- [math](+0) + (+0) = +0\,\![/math]
- [math]\frac<-\infty>= +0\,\![/math]
- [math]\frac<\left|x\right|>= -\infty\,\![/math] (если [math]x\ne0[/math] )
Неопределенность (NaN)
NaN — это аббревиатура от фразы «not a number«. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка — единицы, а мантисса не нулевая.
Знак | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок | Мантисса | ||||||||||||||||
0 /1 | 1 | 1 | 1 | 1 | 1 | 1, | 0 /1 | 0 /1 | 0 /1 | 0 /1 | 0 /1 | 0 /1 | 0 /1 | 0 /1 | 0 /1 | 0 /1 | = [math]NaN[/math] |
14 | 10 | 9 | 0 |
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется.
Как можно получить NaN?
- [math]\infty+(-\infty)= NaN[/math]
- [math]0\times\infty= NaN[/math]
- [math]\frac<\pm0><\pm0>= NaN[/math]
- [math]\frac<\pm\infty><\pm\infty>= NaN[/math]
- [math]\sqrt = NaN[/math] , где [math]x\lt 0[/math]
Есть и другие способы получения NaN, подробности можно найти по ссылкам в соответствующем разделе.
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.
Бесконечности
В число с плавающей запятой можно записать значение [math]+\infty[/math] или [math]-\infty[/math] . Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка — единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.
Знак | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок | Мантисса | ||||||||||||||||
0 /1 | 1 | 1 | 1 | 1 | 1 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | = [math]\pm\infty[/math] |
14 | 10 | 9 | 0 |
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом [math] \frac [/math] [math]= \begin +\infty,&\text\\ NaN,&\text\\ -\infty,&\text \end [/math]
Денормализованные числа
Денормализованные числа (англ. denormalized/subnormal numbers) — это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького нормализованного («обычного») значения числа с плавающей запятой. Согласно стандарту, если порядок равен своему минимальному значению (все его биты — нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это [math]\pm0[/math] . Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего — нули) и данной мантиссой, целая часть которой считается равной нулю, а не единице.
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:
- [math](-1)^s\times1,M\times2^E[/math] , если [math]E_ \le E \le E_[/math] (нормализованное число)
- [math](-1)^s\times0,M\times2^
[/math] , если [math]E=E_-1[/math] (денормализованное число)
Где [math]s[/math] — бит знака, [math]M[/math] — последовательность битов мантиссы, [math]E[/math] — значение порядка (с учетом сдвига), [math]E_[/math] — минимальное значение порядка, используемое для записи чисел (1 — сдвиг) , [math]E_-1[/math] — минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 — сдвиг).
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне — вместо этого используются программные реализации, работающие значительно медленнее.
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale «Quantifying the Interference Caused by Subnormal Floating-Point Values» [1]
Производитель | Процессор | Замедление (разы) |
---|---|---|
IBM | PowerPC 970 | 2,4 |
AMD | Athlon | 6,0 |
Intel | Pentium 3 | 15,8 |
AMD | Athlon 64 | 21,4 |
AMD | Opteron64 | 23,8 |
Intel | Core Duo | 44,2 |
Intel | P4 Xeon | 97,9 |
Intel | Pentium 4 | 131,0 |
Intel | Itanium 2 | 183,2 |
Sun | UltraSPARC IV | 520,0 |
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно очень маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние Flush-to-zero (FTZ) и Denormals-are-zero (DAZ). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули.
Ярким примером подобного «отсечения» денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.
В версии стандарта IEEE 754-2008 денормализованные числа (denormal или denormalized numbers) были переименованы в subnormal numbers, то есть в числа, меньшие «нормальных». Поэтому их иногда еще называют «субнормальными«.
Действия с числами с плавающей запятой
Умножение и деление
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.
Сложение и вычитание
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:
Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном форматеи . Переведем в машинный вид. Для этого сначала переведем его в двоичную систему счисления.
Нормализуем полученное двоичное число по правилам машинной арифметики.
Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно.
Число отрицательное, следовательно, в бите знака будет стоять единица.
Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:10000111 (жирным шрифтом выделен порядок числа, длина мантиссы — 23 бита).
Переведем второе число в машинный вид, совершая те же действия.
= , . . В качестве мантиссы будут сохранены первые бита после запятой т.е. . Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.
Второе число положительное, следовательно, бит знака будет содержать ноль.
Итак в машинном 32-разрядном представлении второе число будет иметь вид:
10000111 Далее в арифметических операциях будет использоваться число , = , а не = видимо для упрощения(хотя это не совсем корректно).
Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.
,
Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок — уменьшить его на единицу. Знак результата — положительный, следовательно, бит знака содержит ноль.
10000110
Проверим правильность наших вычислений. Переведем результат в десятичное представление.
Найдем реальный порядок результата, вычтя из него значение смещения.
Следовательно, число результата будет иметь вид:,
Результат наших вычислений верен, так как- .
Алгоритм получения представления вещественного числа в памяти ЭВМ
Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double.
Как видно из таблицы, величина этого типа занимает в памяти [math]8[/math] байт. На рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):
Знак | Смещённый порядок | Мантисса |
---|---|---|
63 | 62..52 | 51..0 |
Можно заметить, что старший бит, отведенный под мантиссу, имеет номер [math]51[/math] , т.е. мантисса занимает младшие [math]52[/math] бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна [math]1[/math] , здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка хранится здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает [math]11[/math] бит и имеет диапазон от [math]2[/math] [math]-1023[/math] до [math]2[/math] [math]1023[/math] , поэтому смещение равно [math]1023[/math] ( [math]10[/math] ) [math]=[/math] [math]1111111111[/math] ( [math]2[/math] ). Наконец, бит с номером [math]63[/math] указывает на знак числа.
Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:
- перевести модуль данного числа в двоичную систему счисления;
- нормализовать двоичное число, т.е. записать в виде M [math] \times [/math] 2 p , где M — мантисса (ее целая часть равна [math]1[/math] ( [math]2[/math] )) и p — порядок, записанный в десятичной системе счисления;
- прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;
- учитывая знак заданного числа (0 — положительное; 1 — отрицательное), выписать его представление в памяти ЭВМ.
Пример. Запишем код числа [math]-312[/math] , [math]3125[/math] .
- Двоичная запись модуля этого числа имеет вид [math]1001110000101[/math] .
- Имеем [math]1001110000101[/math] [math]=[/math] [math]1001110000101[/math] [math]\times[/math] [math]2[/math] [math]8[/math] .
- Получаем смещенный порядок [math]8[/math] [math]+[/math] [math]1023[/math] [math]=[/math] [math]1031[/math] . Далее имеем [math]1031[/math] ( [math]10[/math] ) [math]=[/math] [math]10000000111[/math] ( [math]2[/math] ).
- Окончательно
1 | 10000000111 | 0011100001010000000000000000000000000000000000000000 |
63 | 62..52 | 51..0 |
Очевидно, что более компактно полученный код стоит записать следующим образом: C073850000000000(16).
Другой пример иллюстрирует обратный переход от кода действительного числа к самому числу.
Пример. Пусть дан код 3FEC600000000000(16) или
0 | 01111111110 | 1100011000000000000000000000000000000000000000000000 |
63 | 62..52 | 51..0 |