Вычислительные машины оперируют с числами, количество разрядов которых ограничено, поскольку электрическое устройство, предназначенное для хранения двоичного числа, имеет определенное число разрядов.
При выполнении операции сложения двоичных чисел возможно переполнение разрядной сетки, которое проявляется в том, что результат операции (получившаяся сумма) требует большего количества разрядов, чем имеется в устройстве для его хранения. Для выявления переполнения разрядной сетки используется модифицированный код. К двоичному числу добавляются два знаковых разряда, причем в обоих разрядах положительные числа содержат нули, а отрицательные числа — единицы. Выполнение операций суммирования с использованием модифицированного дополнительного кода производится по обычным приведенным выше правилам. Если результат суммирования содержит в знаковых разрядах комбинации 01 или 10 (т.е. разные цифры), то это служит признаком переполнения разрядной сетки.
Насмотрим пример сложения чисел:
00 11011 — первое слагаемое в прямом модифицированном коде
+
11 01011 — второе слагаемое в дополнительном модифицированном коде
00 00110 — сумма в прямом модифицированном коде
Переполнение разрядной сетки в данном случае не возникает (в знаковых разрядах комбинация 00). Перенос из старшего знакового разряда при сложении отбрасывается.
Еще один пример:
00 10110
+
00 11011
01 10001.
В знаковых разрядах результата суммирования возникает комбинация 01, что свидетельствует о переполнении разрядной сетки и ошибочности зафиксированного результата. Появление ошибки связано с тем, что при суммировании положительных чисел перенос из старшего разряда оказался зафиксированным во втором из знаковых разрядов. Для записи результата суммирования данном примере потребуется уже шесть (а не пять, как в слагаемых) разрядов (кроме знаковых).
При суммировании отрицательных чисел также возможно переполнение разрядной сетки:
11 010011
+
11 100011
10 110110.
На переполнение указывает комбинация 10 в знаковых разрядах.
В общем случае каждое число состоит из целой и дробной частей. При записи чисел на бумаге эти части отделяют друг от друг запятой. Обычно в вычислительную машину вводят только значащие цифры исходных чисел без запятой. Как же указать машин сколько целых разрядов содержат вводимые числа? Для различных типов машин это делается по-разному.
Некоторые машины устроены таким образом, что у всех вводимых в них чисел запятая стоит после заранее определенного фиксированного разряда. Они называются машинами с фиксированной запятой. К ним, например, относились первые модели ЭВМ «Минск-1» и многие другие. Такие машины оперируют с числами, которые по абсолютной величине меньше единицы, поэтому числа задаются своими дробными частями. Ноль, соответствующий разряду целых единиц, и запятая в машину не вводятся. Например, число 0,125 задается цифрами 125, а число 0,0625 — цифрами 0625. Дробные части десятичных чисел после ввода в электронную машину автоматически переводятся в двоичную систему счисления.
Для хранения одного двоичного числа в различных машинах используется разное количество разрядов, например, в «Минске-1» 31 разряд. Для хранения дробной части числа, переведенного в двоичную систему, используются 30 разрядов. Первый разряд является знаковым. Если число положительное, то машина задает в знаковый разряд 0, если отрицательное, то — 1. В машину «Минск-1» вводятся десятичные числа, содержащие в дробной части семь цифр. Например, число -0,0234375 задается в машине «Минск-1» как -0234375. После перевода в двоичную систему оно хранится в машине в следующем виде: 1000001100000000000000000000000.
Таким образом, машины с фиксированной запятой воспринимают только числа, у которых запятая стоит в строго фиксированном месте. Если при работе этих машин в промежуточных результатах получится число больше единицы, например при сложении, то его старшие (слева от запятой) разряды потеряются и будет неверный итоговый результат.
Во избежание этого предусмотрена автоматическая остановка машины, называемая остановкой по переполнению разрядной сетки машины. Это значит, что при подготовке задачи для решения на машине с фиксированной запятой нужно выбирать такие масштабы (единицы измерения) для исходных данных, чтобы все числа и все получающиеся промежуточные результаты были меньше единицы.
Другие машины, например БЭСМ, оперируют с числами, представленными в нормализованной форме.
Любое число можно представить в виде произведения правильной дроби и целой степени основания системы счисления, в которой это число записано.
Заданное число может быть различными способами записано в ненормализованной форме и поэтому иметь различные порядки и мантиссы. Но записать его в нормализованной форме можно только одним способом. Порядок и мантисса числа при записи его в нормализованной форме точно определяются по самому числу. Поэтому вместо числа можно вводить в электронную вычислительную машину его порядок и мантиссу, получающиеся при такой записи. В машине эти два числа переводятся в двоичную мантиссу и двоичный порядок.
Машины, в которых числа задаются мантиссами и порядками, называются машинами с плавающей запятой. В них все операции над числами сводятся к операциям над их порядками и мантиссами, записанными в двоичной системе.
Точность вычислений в машинах с фиксированной запятой меньше, чем в машинах с плавающей запятой. Для машин с фиксированной запятой труднее составлять программу работы, так как приходится подбирать масштабные коэффициенты, чтобы все промежуточные результаты были меньше единицы. Но их устройство проще, чем у машин с плавающей запятой, у которых имеется дополнительная аппаратура для хранения порядков введенных в машину чисел и выполнения арифметических операций с ним.