В ЭВМ с плавающей запятой число представляется в виде:
X = ± Mx * q±p,
где: Mx - мантисса числа;
q - основание системы счисления;
p - порядок.
Разрядная сетка машины принимает следующий вид:
Это лишь условное изображение основных слогов в числе. Заметим, что в реальной ЭВМ может быть принят любой другой порядок расположения.
Пусть "m" разрядов отведено под изображение мантиссы, а "k" разрядов под изображение порядка. Тогда для двоичной системы и нормализованного вида числа:
q = 2;
0,1 Mx < 1 - нормализованная мантисса.
То есть диапазон чисел:
Теоретически "плавающая запятая" имеет преимущества перед "фиксированной". Но соответствующее устройство получается намного
сложнее. К тому же специфика выполнения операций с плавающей запятой требует большего числа микроопераций, что приводит к снижению быстродействия ЭВМ. Однако "плавающая запятая" снимает с программиста обязанность отслеживать положение запятой в вычислениях и значительно упрощает сам процесс программирования вычислительных задач.
3.3.Коды, применяемые для изображения отрицательных чисел.
Основное неудобство построения устройств, реализующих арифметические операции, состоит в сложном характере алгоритма вычитания. Для его преодоления в ЭВМ всегда операция выполняется по иным правилам, чем это делается обычно. В его основе лежит операция сложения. Алгоритмы выполнения такого рода операций требуют специальных кодов представления отрицательных чисел.
3.3.1.Прямой код.
Это естественное и наиболее привычное представление числа в следующем виде:
знак:
"+" соответствует 0
"-" соответствует 1
В цифровых разрядах пишется модуль положительного или отрицательного числа.
[X]пк - обозначим таким образом изображение числа "X" в прямом коде.
Рассмотрим диапазоны представляемых чисел:
X+min = 0,000....0 - изображение положительного нуля
X+max = 0,111....1 = 1 - 2-n
X-min = 1,111....1 = -(1-2-n)
X-max = 1,000....0 - изображение отрицательного нуля.
Таким образом, нуль имеет двоякое изображение.
Замечания:
1. перед выполнением операции вычитания чисел с одинаковыми знаками и сложения с разными, необходимо сравнить по модулю два кода и, если нужно, сделать перестановку кодов местами, затем можно выполнять собственно операцию вычитания кодов.
2. при выполнении операции умножения отдельно и независимо находятся модули произведений кодов, а знак находится как результат операции сложения по модулю два:
[X]пк * [Y]пк = sign Z. |Z||Z| = |X|*|Y|
sign Z = sign X sign Y или Sz = Sx Sy
Собственно умножение выполняется с применением микроопераций сложения и сдвига.
3. аналогично умножению выполняется операция деления с использованием микроопераций вычитания и сдвига.
Вследствие ряда неудобств в ЭВМ операции вычитания, сложения чисел с разными знаками и деления в прямом коде практически не выполняются.