Как перевести вещественное число в двоичную систему
Перейти к содержимому

Как перевести вещественное число в двоичную систему

  • автор:

Перевод вещественного числа из десятичной системы счисления в двоичную систему

Рассмотрим число 567.25 и переведем его в двоичную систему счисления.

Перевод целого числа из десятичной системы
счисления в двоичную систему

Целая часть числа равна 567. Будем последовательно делить это число, а затем частное на 2 до тех пор, пока это возможно, фиксируя при этом остаток от деления:

567:2 = 283 (остаток 1)

283:2 = 141 (остаток 1)

141:2 = 70 (остаток 1)

70:2 = 35 (остаток 0)

35:2 =17 (остаток 1)

17:2 = 8 (остаток 1)

8:2 = 4 (остаток 0)

4:2 = 2 (остаток 0)

2:2 = 1 (остаток 0)

Теперь запишем число, начиная с последнего частного, приписывая ему остатки в противоположном порядке. Получим

56710 = 10001101112

Эти же операции можно записать последовательным делением в столбик:

Перевод дробной части вещественного числа из
десятичной системы счисления в двоичную

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

Целые части полученных произведений, записанные последовательно слева направо после запятой в искомом числе, образуют дробную часть искомого числа.

Переводим дробную часть числа:

0.25 * 2 = 0. 50.

0.50 * 2 = 1. 00 (дробная часть числа равна 0, стоп).

Записываем последовательно слева направо целые части полученных произведений

Вещественные числа. Вещественные числа в памяти компьютера.

Предположим, в компьютер встроили устройство, кото­рое переводит числа из десятичной системы счисления в двоичную и обратно. Достаточно ли этого для представления чисел в памяти ЭВМ? Оказывается, нет. Мало научиться записывать числа, важно облегчить процесс автоматизированного выполнения арифметических действий над ними.

Вернемся к первым ЭВМ. Основным видом их «деятель­ности» были вычисления, но объём оперативной памяти и быстродействие процессора были невелики и инженерам приходилось придумывать разнообразные способы хранения и обработки чисел, чтобы даже сложные расчёты выполня­лись за разумное время.

Вещественные числа в памяти компьютера.

Операции над целыми числами выполнять проще, но на практике измерения в целых числах встречаются не так уж часто. Поэтому для целых чисел решено было отводить один или два байта. Один байт чаще всего отводился для всевозможных счётчиков, то есть для представления целых положитель­ных чисел.

Максимальным десятичным числом, которое можно было закодировать таким образом, было 255 в десятичной = 11111111 в двоичной = 2^8 — 1.

Для представления положительных и отрицательных це­лых чисел отводилось два байта (16 битов). В качестве при­знака, передающего знак числа, было выбрано значение старшего бита: 0 означал, что закодировано положительное число, 1 — отрицательное.

Максимальным десятичным числом, которое можно было закодировать таким образом, было 32767 в десятичной = 01111111 11111111 в двоичной =2^15. Целые без знака — это множество положитель­ных чисел в диапазоне [0, 2к-1], где к — это разряд­ность ячейки памяти, выделяемой под число. На­пример, если под целое число выделяется ячейка памяти размером в 16 разрядов (2 байта), то самое большое число будет таким: 0111111111111111. Например, десятичное число 255 после перевода в двоичную систему счисления и вписывания в 16-разрядную ячейку памяти будет иметь следующее внутреннее представление: 0000000011111111.

Отрицательные целые числа представляются в до­полнительном коде. Дополнительный код поло­жительного числа N — это такое его двоичное пред­ставление, которое при сложении с кодом числа N дает значение 2^к. Здесь к — количество разрядов в ячейке памяти. Например, дополнительный код числа 255 будет следующим: 1111111100000001.

Это и есть представление отрицательного числа -255. Сложим коды чисел 255 и —255:

Вычитание.

Единичка в старшем разряде «выпала» из ячейки, поэтому сумма получилась равной нулю. Но так и должно быть: N + (— N) = 0. Процессор компьюте­ра операцию вычитания выполняет как сложение с дополнительным кодом вычитаемого числа. При этом переполнение ячейки (выход за предельные значе­ния) не вызывает прерывания выполнения программы. Это обстоятельство программист обязан знать и учитывать!

С вещественными числами дело обстояло немного слож­нее, поскольку надо было придумать способ, одинаковый для кодирования и больших, и маленьких чисел, то есть и миллион (1 000 000), и одну миллионную (0,000 001) хоте­лось бы кодировать посредством одного и того же алгорит­ма.

В соответствии с принципом позиционности любое деся­тичное число можно представить в виде произведения двух чисел, одно из которых меньше единицы, а другое представ­ляет собой некоторую степень десяти.

Такое представление чисел называется записью с плава­ющей точкой (запись 123,45 — запись с фиксированной точкой). В этой записи число имеет четыре характеристи­ки:

  • Знак числа.
  • Знак порядка.
  • Порядок (степень числа 10).
  • Мантисса (дробная часть числа).

При двоичном кодировании необходимо было все эти ха­рактеристики как-то отразить.

Максимальный порядок числа был равен 111111в двоичной = 63 в десятичной,следовательно, максимальным числом, которое можно было закодировать таким образом, было 10^63.

Формат представления вещественных чисел в ком­пьютере называется форматом с плавающей точ­кой. Вещественное число R представляется в виде произведения мантиссы т на основание системы счисления п в некоторой целой степени р, которую называют порядком: R = т х п^р.

Чтобы не было неоднозначности, договорились в ЭВМ использовать нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализованном представлении должна удовлетво­рять условию: 0,1п< т < 1я. Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. В некоторых случаях условие нормализации принимают следующим: 1 с индексом и < т < 10 с индексом п.

В памяти компьютера мантисса представляет­ся как целое число, содержащее только значащие цифры (0 целых и запятая не хранятся). Следова­тельно, внутреннее представление вещественного числа сводится к представлению пары целых чисел: мантиссы и порядка.

Было решено отводить под вещественные числа 4 байта (32 бита). Три младших байта отводилось под запись ман­тиссы, а старший байт включал в себя:

  • Один (старший) бит — знак числа: 0 — положительное,
    1 — отрицательное.
  • Один бит — знак порядка: 0-положительный, 1-отрицательный.
  • Младшие 6 битов — порядок числа.

В разных типах компьютеров применяются различные варианты представления чисел в форме с плавающей точкой. Рассмотрим один из вариантов внутреннего представления вещественного числа в четырехбайтовой ячейке памяти.

В ячейке должна содержаться следующая инфор­мация о числе: знак числа, порядок и значащие циф­ры мантиссы.

Машинный порядок Мантисса
1-й байт. 1-й, 2-й и 3-й байты.

В старшем бите 1-го байта хранится знак числа: 0 обозначает плюс, 1 — минус. Оставшиеся 7 бит пер­вого байта содержат машинный порядок. В следую­щих трех байтах хранятся значащие цифры мантис­сы (24 разряда).

В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. Значит, машинный порядок изменяется в диапазоне от 0 до 127 (в десятичной системе счисления). Всего 128 значений. Порядок, очевидно, может быть как положительным, так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка: от —64 до 63.

Машинный порядок смещен относительно ма­тематического и имеет только положительные зна­чения. Смещение выбирается так, чтобы минимальному математическому значению порядка соответ­ствовал ноль. Связь между машинным порядком (Мр) и математическим (р) в рассматриваемом случае выражается формулой:
Мр = р + 64. Полученная формула записана в десятичной си­стеме. В двоичной системе формула имеет вид: МР = Р +10000000.

Для записи внутреннего представления веществен­ного числа необходимо:

  • Перевести модуль данного числа в двоичную систему счисления с 24 значащими цифрами.
  • Нормализовать двоичное число.
  • Найти машинный порядок в двоичной системе счисления.
  • Учитывая знак числа, выписать его представле­ние в четырехбайтовом машинном слове.

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

Если при вычислениях с вещественными числами результат выходит за пределы допустимого диапа­зона, то выполнение программы прерывается. Такое происходит, например, при делении на ноль, или на очень маленькое число, близкое к нулю.

Вещественные числа, разрядность мантиссы кото­рых превышает число разрядов, выделенных под мантиссу в ячейке памяти, представляются в компью­тере приближенно (с «обрезанной» мантиссой). Например, рациональное десятичное число 0,1 в компьютере будет представлено приближенно (ок­ругленно), поскольку в двоичной системе счисления его мантисса имеет бесконечное число цифр. След­ствием такой приближенности является погрешность машинных вычислений с вещественными числами.

Вычисления с вещественными числами компьютер выполняет приближенно. Погрешность таких вычис­лений называют погрешностью машинных ок­руглений.

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

В настоящее время, когда быстродействие процессоров и объём оперативной памяти достаточно велики, а обычной разрядностью компьютеров становится 32 или 64 бита, уже нет жёстких требований к использованию экономных кодов для записи чисел.

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

Перевод из десятичной системы счисления в двоичную

Перед тем как перейти к алгоритму перевода, вспомним алфавит двоичной и десятичной системы счисления:

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

Алгоритм перевода целых десятичных чисел в двоичную систему счисления

  1. Последовательно выполнять деление десятичного числа и получаемых целых частных на 2, до тех пор, пока частное не станет равным 0.
  2. Для получения ответа в двоичном коде, необходимо записать, полученные, в результате деления остатки, в обратном порядке.

Пример 1 : перевести десятичное число 123 в двоичную систему счисления

Для наглядности произведем деление «столбиком». Решение будет выглядеть следующим образом:

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

Алгоритм перевода десятичной дроби в двоичную систему

  1. Последовательно выполнять умножение исходной дроби на 2, до тех пор, пока, дробная часть не станет равна 0 или пока не будет достигнута необходимая точность вычисления.
  2. Полученная дробь в двоичной системе будет равна прямой последовательности целых частей произведений.

Пример 2: перевести число 0,123 в двоичную систему.

Решение будет выглядеть следующим образом:

0.123 ∙ 2 = 0.246 (0)
0.246 ∙ 2 = 0.492 (0)
0.492 ∙ 2 = 0.984 (0)
0.984 ∙ 2 = 1.968 (1)
0.968 ∙ 2 = 1.936 (1)
0.936 ∙ 2 = 1.872 (1)
0.872 ∙ 2 = 1.744 (1)
0.744 ∙ 2 = 1.488 (1)
0.488 ∙ 2 = 0.976 (0)
0.976 ∙ 2 = 1.952 (1)
0.952 ∙ 2 = 1.904 (1)

В данном примере можно продолжить вычисления, но зачастую, такой точности будет достаточно.

Перевод дробного десятичного числа в двоичную систему

Для того чтобы перевести десятичное число, содержащее дробную часть, необходимо отдельно перевести целую часть и отдельно дробную.

Пример 3: перевести число 110,625 из десятичной системы в двоичную

Для решения примера потребуется отдельно перевести 110 и отдельно 0,625 из десятичной системы в двоичную, используя вышеизложенные алгоритмы. Таким образом переведя 110, получим:

Перевод десятичной дроби 0,625 выглядит так:

0.625 ∙ 2 = 1.25 (1)
0.25 ∙ 2 = 0.5 (0)
0.5 ∙ 2 = 1 (1)

Теперь осталось соединить результаты перевода. Таким образом: 110.62510=1101110.1012

Обратите внимание, что данный пример наглядно демонстрирует ситуацию, при которой дробная часть стала равной 0 и дальнейшее вычисление закончилось.

Как перевести дробное десятичное число в двоичное. С плавающей запятой.

Перевод из десятичной в произвольную позиционную систему счисления
Целая часть
1. Последовательно делить целую часть десятичного числа на основание, пока десятичное число не станет равно нулю.
2. Полученные при делении остатки являются цифрами нужного числа. Число в новой системе записывают, начиная с последнего остатка.
Дробная часть
1. Дробную часть десятичного числа умножаем на основание системы, в которую требуется перевести. Отделяем целую часть. Продолжаем умножать дробную часть на основание новой системы, пока она не станет равной 0.
2. Число в новой системе записывают, начиная с последнего остатка, как при целой части.

Пример
44(10) переведём в двоичную систему
44 делим на 2. частное 22, остаток 0
22 делим на 2. частное 11, остаток 0
11 делим на 2. частное 5, остаток 1
5 делим на 2. частное 2, остаток 1
2 делим на 2. частное 1, остаток 0
1 делим на 2. частное 0, остаток 1
Частное равно нулю, деление закончено. Теперь записав все остатки снизу вверх получим число 101100(2)

Для перевода дробной части числа в другие системы счисления нужно обратить целую часть в нуль и начать умножение получившегося числа на основание той системы, в которую нужно перевести. Если в результате умножения будут снова появляться целые части, их нужно повторно обращать в нуль, предварительно запомнив (записав) значение получившейся целой части. Операция заканчивается, когда дробная часть полностью обратится в нуль. Ниже приводится пример перевода числа 103,625(10) в двоичную систему счисления.

Переводим целую часть по правилам, описанным выше, получаем 103(10) = 1100111(2).
0,625 умножаем на 2. Дробная часть 0,250. Целая часть 1.
0,250 умножаем на 2. Дробная часть 0,500. Целая часть 0.
0,500 умножаем на 2. Дробная часть 0,000. Целая часть 1.
Итак, сверху вниз получаем число 101(2)
103,625(10) = 1100111,101(2)

Точно также осуществляется перевод в системы счисления с любым основанием.
Сразу нужно отметить, что этот пример специально подобран, в общем случае очень редко удаётся завершить перевод дробной части числа из десятичной системы в другие системы счисления, а потому, в подавляющем большинстве случаев, перевод можно осуществить с какой либо долей погрешности. Чем больше знаков после запятой — тем точнее приближение результата перевода к истине. В этих словах легко убедиться, если попытаться, например, перевести в двоичный код число 0,626.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *