
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
- •Введение
- •Глава 4, подготовленная доцентом о.П. Шафеевой, посвящена вопросам разработки алгоритмических моделей выполнения арифметических операций и моделирования на пэвм спроектированных алгоритмов.
- •Основы двоичной компьютерной арифметики
- •1.1. Позиционные системы счисления
- •Десятичная позиционная система счисления
- •Двоичная позиционная система счисления
- •1.1.3. Восьмеричная позиционная система счисления
- •1.1.4. Шестнадцатеричная позиционная система счисления
- •Перевод чисел из одной позиционной системы счисления в другую
- •1.2.1. Перевод целых чисел
- •1.2.2. Перевод правильных дробей
- •1.2.3. Перевод неправильных дробей из одной системы счисления в другую
- •1.2.4. Частный случай перевода чисел из одной системы счисления в другую
- •1.2.5. Перевод чисел из одной системы счисления в другую с использованием промежуточной двоично-десятичной системы
- •1.3. Представление чисел с фиксированной запятой (точкой)
- •1.4. Представление чисел с плавающей запятой (точкой)
- •1.5. Коды двоичных чисел
- •1.5.1. Прямой код
- •1.5.2. Обратный код
- •1.5.3. Модифицированный обратный код
- •1.5.4. Дополнительный код
- •1.5.5. Модифицированный дополнительный код
- •2. Выполнение арифметических операций с двоичными числами
- •2.1. Сложение (вычитание) двоичных чисел с фиксированной запятой
- •2.1.1. Алгебраическое сложение чисел в дополнительном коде
- •2.1.2. Алгебраическое сложение чисел в обратном коде
- •2.1.3. Переполнение разрядной сетки при сложении чисел
- •2.2. Сложение (вычитание) двоичных чисел с плавающей запятой
- •2.2.1. Метод ускоренного сложения двоичных чисел с запоминанием переносов
- •2.3. Умножение двоичных чисел с фиксированной запятой
- •2.4. Машинные технологии выполнения операции умножения двоичных чисел с фиксированной запятой
- •2.5. Умножение двоичных чисел с плавающей запятой
- •2.6. Методы ускоренного выполнения операции умножения двоичных чисел
- •2.6.1. Метод пропуска такта суммирования
- •2.6.2. Метод анализа сомножителей
- •2.6.3. Метод расшифровки и одновременного умножения на два разряда множителя
- •2.6.4. Метод ускоренного умножения Мак-Сорли
- •2.6.5. Метод ускоренного умножения Лемана
- •2.6.6. Метод умножения с расшифровкой пар разрядов множителя и запоминанием переносов
- •2.7. Деление двоичных чисел с фиксированной запятой
- •2.8. Деление двоичных чисел с плавающей запятой
- •3. Основы десятичной компьютерной арифметики
- •3.1. Машинное кодирование десятичных чисел
- •3.2. Выполнение арифметических операций с десятичными числами
- •3.2.1. Сложение десятичных чисел в эвм
- •3.2.2. Умножение десятичных чисел в эвм
- •3.2.3. Ускорение умножения в -кодах
- •Деление десятичных чисел в эвм
- •4. Алгоритмические модели выполнения арифметических операций
- •4.1. Проектирование универсального алгоритма перевода чисел в разные системы счисления
- •4.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
1.3. Представление чисел с фиксированной запятой (точкой)
В современных ЭВМ общего назначения, как правило, используются двоичные и двоично-десятичные позиционные системы счисления. При этом имеют место два способа представления в них чисел с фиксированной запятой (точкой) и с плавающей запятой (точкой).
При работе с фиксированной запятой оперируют с правильными дробями, т.е. с числами, которые по модулю строго меньше единицы.
При этом применяется естественная запись числа в виде последовательности цифр, у которой запятая фиксирована перед первым (старшим) цифровым разрядом. Слева от запятой отводится разряд (или два разряда) для изображения знака числа. Приняты следующие обозначения знака числа: “ + “ = 0 ;
“ – “ = 1 .
Таким образом, в знаковом разряде расположен 0, если число положительное, и 1, если число отрицательное.
Пример.
0,101101 – положительное число;
1,101101 – отрицательное число, совпадающее по модулю с приведенным выше положительным числом.
Достоинствами такого представления чисел являются простые арифметические операции, обеспечивающие высокое быстродействие ЭВМ.
Недостатком представления чисел с фиксированной запятой является небольшой диапазон представляемых чисел, определяемый выражением:
,
где – количество разрядов, предназначенных для дробной части числа.
Возможно также переполнение разрядной сетки при сложении чисел с фиксированной запятой с одинаковыми знаками, каждое из которых по модулю меньше 1, а сумма по модулю больше или равна 1. Переполнение разрядной сетки возможно также при делении, если модуль делимого больше или равен модулю делителя.
Переполнение
разрядной сетки проявляется в том, что
результат операции (сумма или частное)
,
т.е старший разряд результата операции
оказывается в знаковом разряде, что
недопустимо и требует остановки
вычислительного процесса.
Возможен также «машинный нуль», т.е. выход старшего разряда числа, равного 1, за пределы младшего разряда разрядной сетки.
1.4. Представление чисел с плавающей запятой (точкой)
Любое число в позиционной системе счисления можно представить в следующем виде:
,
где
–
мантисса числа
,
причем
;
–
нуль или произвольное целое число,
называемое порядком числа
;
10 – основание системы счисления.
Например, при двоичной записи мантиссы и порядка имеем:
N1 = + 0,101101 = + 0,101101∙100 (m1 = + 0,101101; p1 = 0)
N2 = – 1101,01 = – 0,110101∙10+100 (m2 = – 0,110101; p2 = +100)
N3 = + 0,000101 = + 0,101000∙10-11 (m3 = + 0,101000; p3 = –11).
Из
приведенных примеров легко видеть, что
мантисса
представляет собой цифровую часть
числа, выраженную правильной дробью, а
порядок
указывает на место положения запятой
в числе
и является целым числом. Иными словами,
порядок
указывает номер разряда правильной
дроби
,
после которого при
или перед которым при
необходимо поставить запятую, начиная
счет с первого (старшего) разряда дроби.
Таким образом, для записи числа в ячейке памяти машины с плавающей запятой необходимо иметь место для записи знака мантиссы (знака числа), модуля мантиссы (цифровых разрядов числа ), знака порядка и самого порядка. При этом следует помнить, что весовые коэффициенты цифр мантиссы определяются величиной и знаком порядка, а весовые коэффициенты порядка (разрядов от младшего к старшему) фиксированы и равны 20, 21, 22, 23 и т.д.
Если в старшем разряде мантиссы находится единица, то такое число называется нормализованным, а если в старшем разряде мантиссы или нескольких подряд, начиная со старшего разряда мантиссы, находятся нули, то такое число называется ненормализованным (денормализованным).
Для его нормализации следует мантиссу сдвинуть влево до первой единицы в старшем разряде, а из порядка отнять число единиц, равное числу разрядов, на которое была сдвинута влево мантисса.
Если при выполнении арифметических операций произойдет переполнение разрядной сетки, т.е. цифровой разряд (старший разряд мантиссы) окажется в знаковом разряде, то мантиссу сдвигают на один разряд вправо и к порядку прибавляют единицу. Эта операция автоматически устраняет переполнение разрядной сетки.
Диапазон нормализованных чисел, представимых в машине с плавающей запятой, может быть определен следующим неравенством:
,
где
–
число разрядов абсолютной величины
мантиссы;
– число разрядов абсолютной величины
порядка.
Столь широкий диапазон представимых чисел делает ненужным при решении задач введение масштабных коэффициентов и практически исключает переполнение разрядной сетки, влекущее за собой останов вычислительного процесса. Однако за эти преимущества приходится платить увеличением числа разрядов в машине, а следовательно, и аппаратурными затратами, а также усложнением системы управления и вычислительных алгоритмов при выполнении арифметических операций, т.е. снижением производительности ЭВМ.