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

Разработка алгоритма выполнения операций умножения двоичных чисел в формате расширенной точности на сумматоре обратного кода. Преобразование входной строки в десятичное число. Разработка алгоритма арифметической операции. Тестирование программы-эмулятора.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.06.2012
Размер файла 119,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Оглавление

1. Индивидуальное задание

2. Введение

3. Разработка алгоритма и программного модуля преобразования данных в заданный формат

4. Разработка алгоритма арифметической операции

5. Разработка программы-эмулятора

6. Тестирование программы

7. Вывод

8. Список использований литературы

9. Листинг программы

1. Индивидуальное задание

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

Входные данные: Десятичные числа в строковом формате, например 22, 22.33

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

2. Введение

Алгоритм решения задачи:

1) Преобразование входной строки в десятичное число;

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

3) Преобразование двоичного числа в формат расширенной точности;

4) Повторить 1-3 пункты для второго числа;

5) Перевод чисел в обратный код;

6) Выполнение требуемой операции (умножение);

7) Перевод результата в прямой код;

8) Нормализация;

9) Вычисление погрешностей.

3. Разработка алгоритма и программного модуля преобразования данных в заданный формат

Формат расширенной точности:

Расширенное вещественное число состоит из 80 бит: первый бит - знак мантиссы, 16 бит - характеристика и 63бита - мантисса. С помощью этого формата можно представить нормированные числа в диапазоне от до .

Если значение знакового бита равно 1, то число считается отрицательным, если 0 - то положительным. Число нуль считается положительным.

Размерность формата

80 бита

Размерность мантиссы

53 бита

Размерность порядка

15 бит

Смещение порядка

+16383

Обратный код.

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

Преобразования в обратный код

Диапазон представляемых значений:

Минимальное число: |±12•2-16382 | ? |± 3,36210314e-4932|

Максимальное число: |±12•216383-1| ? |± 5,9486574e+4931|

+16383 -16382 .. +16383

Алгоритм преобразования вещественного десятичного числа в двоичное число с плавающей точкой формата расширенной точности.

1. Представить целую часть вещественного числа в двоичном виде и поставить после нее десятичную точку.

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

3. Записать полученное значение дробной части после десятичной точки. Если значение мантиссы меньше выделенного под нее количества разрядов, то дополнить ее незначащими нулями справа до предусмотренного форматом размера.

4. Нормализовать полученное двоичное число, определив значение показателя степени.

5. К показателю степени прибавить +16383.

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

7. Если число положительное, то в самый старший разряд представления следует записать 0, если отрицательное - то 1.

Размещено на http://www.allbest.ru/

Перевод целых чисел методом деления

Размещено на http://www.allbest.ru/

Перевод правильных дробей методом умножения

Размещено на http://www.allbest.ru/

Оценка точности выполнения арифметических операций.

Причинами погрешностей вычислений на ЭВМ могут быть:

- неточное задание исходных данных, участвующих в выполняемой операции (либо из-за ограниченности разрядной сетки, либо из-за погрешностей перевода информации из одной системы счисления в другую);

- использование приближенных методов вычислений, что дает методическую погрешность;

- округление результатов элементарных операций;

- накапливание погрешностей в последовательности элементарных операций;

- сбои в работе ЭВМ.

Абсолютная погрешность - разность между истинным значением величины А и ее значением, полученным из машинного изображения АM (или [A]), т.е. ?[A]=A-AM.

Относительная погрешность представления - это величина [A]=?[A]/AM.

Пример преобразования числа в формат расширенной точности.

К примеру возьмём число 45.56

Целая часть 4510 = 1011012.

0.5610= 0.10001111010111000010100011110101110000101011100001011100012.

45.5610=101101.10001111010111000010100011110101110000101011100001011100012.

Нормализуем:

1.011011000111101011100001010001111010111000010101110000101110001*25.

Характеристика q =16383+5 = 1000000000001002;

0

1000000000000

1011011000111101011100001010001111010111000010101110000101110001

S

порядок

мантисса

101101.10001111010111000010100011110101110000101011100001011100012= 45.559999999999999998

Полученное число не равно исходному, потому что мантисса ограниченна.

Абсолютная погрешность: ?[A] = |45.56- 45.559999999999999998| =0.000000000000000002

Относительная погрешность: [A] = ? 4.389815•10-21

4. Разработка алгоритма арифметической операции

Алгоритм умножения двух чисел:

1) Перевод мантисс слагаемых в обратный код;

2) Вычисление произведения мантисс сомножителей в форме с фиксированной запятой

3) Сложение смещенных порядков сомножителей;

4) Нормализация результата.

Перевод мантисс слагаемых в обратный код.

Размещено на http://www.allbest.ru/

Вычисление произведения мантисс сомножителей в форме с фиксированной запятой

Нормализация результата.

Размещено на http://www.allbest.ru/

5. Разработка программы-эмулятора

Разработка структур данных.

Программа разработана на языке Turbo Pascal 7.0.

Для представления чисел в формате расширенной точности используем 3 строки

- Zn - знак числа, типа string[1];

- Exp - порядок числа, типа string[15];

- Mnts - мантисса, типа string[64];

Программная реализация модуля преобразования данных

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Сложение двоичных чисел function summ(a,b:string):string;

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Модифицированное сложение

procedure modslog(mpa1,mpa2,mpb1,mpb2:string;var ms1,ms2:string);

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Модифицированный сдвиг

Размещено на http://www.allbest.ru/

Программная реализация алгоритма выполнения арифметической операции.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Структура программы-эмулятора.

Размещено на http://www.allbest.ru/

Разработка графического интерфейса

При запуске программы пользователь увидит:

программа алгоритм эмулятор умножение

Размещено на http://www.allbest.ru/

Введём А и В сразу

Размещено на http://www.allbest.ru/

После ввода В

Размещено на http://www.allbest.ru/

После можно проссмотреть процесс умножения по шагово стрелкой “<” , или результат стрелкой “>”

Нажмём “>”

Размещено на http://www.allbest.ru/

6. Тестирование программы

1) Введите число А: 18446744073709551615

Введите число А: 1

A(в 2-ой СС): 1111111111111111111111111111111111111111111111111111111111111111

B(в 2-ой СС): 1

A в расширенной точности

0|100000000111110|1111111111111111111111111111111111111111111111111111111111111111

B в расширенной точности

0|11111111111111|1000000000000000000000000000000000000000000000000000000000000000

A[обр]: 0|100000000111110|1111111111111111111111111111111111111111111111111111111111111111

B[обр]: 0|11111111111111|1000000000000000000000000000000000000000000000000000000000000000

------------------------------

00|0000000000000000000000000000000000000000000000000000000000000000|1000000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0100000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0010000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0001000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000100000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000010000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000001000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000100000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000010000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000001000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000100000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000010000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000001000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000100000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000010000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000001000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000100000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000010000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000001000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000100000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000010000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000001000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000100000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000010000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000001000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000100000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000010000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000001000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000100000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000010000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000001000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000100000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000010000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000001000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000100000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000010000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000001000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000100000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000010000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000001000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000100000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000010000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000001000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000100000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000010000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000001000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000100000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000010000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000001000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000100000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000010000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000001000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000100000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000010000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000001000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000100000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000010000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000001000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000100000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000010000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000001000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000100 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000010 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000001 m(b)(-2)=1: +m(a)

+

00|1111111111111111111111111111111111111111111111111111111111111111

00|1111111111111111111111111111111111111111111111111111111111111111|0000000000000000000000000000000000000000000000000000000000000001 Z->

00|0111111111111111111111111111111111111111111111111111111111111111|1000000000000000000000000000000000000000000000000000000000000000

мантисса(Z(обр))=00.0111111111111111111111111111111111111111111111111111111111111111

P(z)=64+1=65

mantisa(Z(pr.))=00.0111111111111111111111111111111111111111111111111111111111111111

Сдвиг на 1 влево 00.111111111111111111111111111111111111111111111111111111111111111 P(z)=65-1=64

Z=0.111111111111111111111111111111111111111111111111111111111111111*2^64

Z=1111111111111111111111111111111111111111111111111111111111111111

Z=18446744073709551600.000000000000000000

Абсолютная погрешность: 1.50000000000000E+0001

Относительная погрешность: 8.13151629364128E-0019

Истинное значение: 1.84467440737096E+0019

2)

Введите число А: 0.00000000005

Введите число В: 2

A(в 2-ой СС): 0.000000000000000000000000000000000011011011111001101111111011001

B(в 2-ой СС): 10

A в расширенной точности

0|11111111111111|0000000000000000000000000000000000011011011111001101111111011001

B в расширенной точности

0|100000000000000|1000000000000000000000000000000000000000000000000000000000000000

A[обр]: 0|11111111111111|0000000000000000000000000000000000011011011111001101111111011001

B[обр]: 0|100000000000000|1000000000000000000000000000000000000000000000000000000000000000

------------------------------

00|0000000000000000000000000000000000000000000000000000000000000000|1000000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0100000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0010000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0001000000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000100000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000010000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000001000000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000100000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000010000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000001000000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000100000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000010000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000001000000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000100000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000010000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000001000000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000100000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000010000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000001000000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000100000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000010000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000001000000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000100000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000010000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000001000000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000100000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000010000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000001000000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000100000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000010000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000001000000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000100000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000010000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000001000000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000100000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000010000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000001000000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000100000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000010000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000001000000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000100000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000010000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000001000000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000100000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000010000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000001000000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000100000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000010000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000001000000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000100000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000010000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000001000000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000100000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000010000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000001000000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000100000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000010000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000001000000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000100000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000010000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000001000 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000100 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000010 Z->

00|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000001 m(b)(-2)=1: +m(a)

+

00|0000000000000000000000000000000000011011011111001101111111011001

00|0000000000000000000000000000000000011011011111001101111111011001|0000000000000000000000000000000000000000000000000000000000000001 Z->

00|0000000000000000000000000000000000001101101111100110111111101100|1000000000000000000000000000000000000000000000000000000000000000

мантисса(Z(обр))=00.0000000000000000000000000000000000001101101111100110111111101100

P(z)=1+2=3

mantisa(Z(pr.))=00.0000000000000000000000000000000000001101101111100110111111101100

Сдвиг на 36 влево 00.1101101111100110111111101100 P(z)=3-36=-33

Z=0.1101101111100110111111101100*2^-33

Z=0.0000000000000000000000000000000001101101111100110111111101100

Z=0.000000000100000000

Абсолютная погрешность: 6.31088724176809E-0030

Относительная погрешность: 6.31088724176809E-0020

Истинное значение: 1.00000000000000E-0010

Вывод

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

Список использований литературы

1. Савельев А.Я. Основы информатики. М.: Изд-во МГТУ им. Н.Э. Баумана, 2001 г., 328с.

2. Григорьев В.Л., Злобин В.К. Программирование арифметических операций в микропроцессорах. М.: Высш. школа, 1991. 303с.

Листинг программы

{$N+}

program kjhsg;

uses crt;

var n,ai:integer; as,as1,as2,vvs,vvs2,zs1,zs2:string; ach,zn:char;

ch1s1,ch1s2,ch2s1,ch2s2:string; ch1s1dv,ch2s1dv,ch1s2dv,ch2s2dv:string;

ch1n2,ch2n2:longint;

ch1n1,ch2n1:extended;

shag,avto:boolean;

tochn,porx,pory,porx2,pory2:integer;porxs,porys:string;

chpx,chpy:string;

chpminx,chpminy,norzac:boolean;

ma1,ma2,ma3,mb1,mb2,mb3:string;

z1,z2,z3,mz1,mz2,mz3:string;

modula:string;

por1,por2,por,por3,norsdv:longint;

pos1,pos2,pos1i,pos2is,pos2i:string;

pog1,nast,nast1,nast2,abspog:extended;

smeshgen1,smeshgen2:string;

procedure avshag;

var chk:char;

begin

if avto=false then begin

chk:=readkey;

case readkey of

#75:shag:=true;

#77:avto:=true;

end;

end;

end;

procedure DecToBin(const aStr : String;var zs,s1,s2:string;var nst:extended);

const

BaseIn = 10;

BaseOut = 2;

var

i, PosDot,aq,tochnost: Integer;

StrRes, vStr, StrSign, StrDot,as1q,as2q : String;

Num, TmpNum, Weight : Extended; cel:boolean;

begin

if aStr = '' then Exit;

if aStr[1] = '-' then begin

StrSign := '-';

vStr := Copy(aStr, 2, Length(aStr) - 1);

end else begin

StrSign := '';

vStr := aStr;

end;

zs:=StrSign;

PosDot := Length(vStr) + 1;

for i := 1 to Length(vStr) do begin

if vStr[i]='.' then begin

PosDot := i;

Break;

end;

end;

Num := 0;

Weight := 1;

for i := PosDot - 1 downto 1 do begin

case vStr[i] of

'0' : Num := Num + 0 * Weight;

'1' : Num := Num + 1 * Weight;

'2' : Num := Num + 2 * Weight;

'3' : Num := Num + 3 * Weight;

'4' : Num := Num + 4 * Weight;

'5' : Num := Num + 5 * Weight;

'6' : Num := Num + 6 * Weight;

'7' : Num := Num + 7 * Weight;

'8' : Num := Num + 8 * Weight;

'9' : Num := Num + 9 * Weight;

end;

Weight := Weight * BaseIn;

end;

Weight := 1 / BaseIn;

for i := PosDot + 1 to Length(vStr) do begin

case vStr[i] of

'0' : Num := Num + 0 * Weight;

'1' : Num := Num + 1 * Weight;

'2' : Num := Num + 2 * Weight;

'3' : Num := Num + 3 * Weight;

'4' : Num := Num + 4 * Weight;

'5' : Num := Num + 5 * Weight;

'6' : Num := Num + 6 * Weight;

'7' : Num := Num + 7 * Weight;

'8' : Num := Num + 8 * Weight;

'9' : Num := Num + 9 * Weight;

end;

Weight := Weight / BaseIn;

end;

nst:=num;

StrRes := '';

tochnost:=64;

TmpNum := Int(Num);

repeat

case Round( TmpNum - Int(TmpNum / BaseOut) * BaseOut ) of

0 : StrRes := '0' + StrRes;

1 : StrRes := '1' + StrRes;

end;

TmpNum := Int(TmpNum / BaseOut);

tochnost:=tochnost-1;

until TmpNum = 0;

i := 0;

cel:=true;

TmpNum := Frac(Num);

while (TmpNum <> 0) and (tochnost> i) do begin

cel:=false;

if i = 0 then StrRes := StrRes + '.';

TmpNum := TmpNum * BaseOut;

case Round(Int(TmpNum)) of

0 : StrRes := StrRes + '0';

1 : StrRes := StrRes + '1';

end;

TmpNum := Frac(TmpNum);

Inc(i);

end;

aq:=1;

as1q:='';

as2q:='';

if cel=false then begin

while (StrRes[aq]<>'.') do begin

as1q:=as1q+StrRes[aq]; aq:=aq+1; end; aq:=aq+1;

as2q:=copy(StrRes,aq,length(StrRes)-1);

s1:=as1q;

s2:=as2q;

end else begin s1:=StrRes; s2:=''; end;

end;

function Dec2Bin(a:integer):string;

var

i:integer;

as,j:string;

begin

if a=0 then begin Dec2Bin:='0'; exit end;

as:='';

while a<>0 do

begin

i:=a mod 2;

str(i,j);

as:=j+as;

a:=a div 2;

end;

Dec2Bin:=as;

end;

function dr2bin(ds:string):string;

var i:integer; rs,tp:real;

begin

if ds='0' then begin dr2bin:='0'; exit end;

ds:='0.'+ds;

val(ds,rs,i);i:=0;

ds:='';

tp:=rs;

while (tp<>0)and(tochn>i)do begin

tp:=tp*2;

case round(int(tp)) of

0:ds:=ds+'0';

1:ds:=ds+'1';

end;

tp:=frac(tp);

inc(i);

end;

dr2bin:=ds;

end;

function obrcod(os:string;minss:boolean):string;

var i,j,n,k:integer; dos:string;

begin

if minss=false then begin obrcod:=os; exit; end;

n:=length(os);

for i:=1 to n do

if os[i]='1' then os[i]:='0' else os[i]:='1';

obrcod:=os;

end;

procedure doraven(var rs1,rs2:string);

begin

while length(rs1)<64 do rs1:=rs1+'0';

while length(rs2)<64 do rs2:=rs2+'0';

end;

function summ(a,b:string):string;

var

c,vume:string;

i,n:integer;

begin

c:='';

vume:='0';

while length(a)<>length(b) do

begin

if length(a)>length(b) then

b:='0'+b;

if length(a)<length(b) then

a:='0'+a;

end;

for i:=length(a) downto 1 do

begin

if (a[i]='0') and (b[i]='0') then

begin

c:=vume+c;

vume:='0';

end

else

if (a[i]='1') and (b[i]='1') then

begin

c:=vume+c;

vume:='1';

end

else

if (a[i]='1') or (b[i]='1') then

begin

if vume='0' then

c:='1'+c

else

c:='0'+c;

end;

end;

if vume<>'0' then c:=vume+c;

summ:=c;

end;

procedure modslog(mpa1,mpa2,mpb1,mpb2:string;var ms1,ms2:string);

var

ch1:char;

n,i:integer;

begin

ms2:=summ(mpa2,mpb2);

ms1:=summ(mpa1,mpb1);

if length(ms2)>length(mpa2) then begin

ms1:=summ(ms1,'1'); delete(ms2,1,1) ; end;

if length(ms1)>2 then begin ms2:=summ(ms2,'1'); delete(ms1,1,1);end;

end;

procedure sdvig;

var ch1:char; i,n:integer;

begin

val(z1,n,i);

case n of

00:begin z1:='00';ch1:=z2[length(z2)];

delete(z2,length(z2),1); z2:='0'+z2;

delete(z3,length(z3),1); z3:=ch1+z3; end;

01: begin

z1:='00';ch1:=z2[length(z2)];

delete(z2,length(z2),1); z2:='1'+z2;

delete(z3,length(z3),1); z3:=ch1+z3;end;

10: begin

z1:='11';ch1:=z2[length(z2)];

delete(z2,length(z2),1); z2:='0'+z2;

delete(z3,length(z3),1); z3:=ch1+z3;end;

11: begin z1:='11';ch1:=z2[length(z2)];

delete(z2,length(z2),1); z2:='1'+z2;

delete(z3,length(z3),1); z3:=ch1+z3; end;

end;

end;

procedure umnog;

var ch,chk:char; i,k,n:integer;shag,avto,mtrue2:boolean;

begin

for n:=1 to length(mb2) do z2:=z2+'0';

z1:='00'; z3:=mb2;

write(z1,'|',z2,'|',z3) ;

if chpminy then begin modslog(z1,z2,ma1,ma2,z1,z2); mz3:=z3;

writeln(' B<0 =>+A*2^(-n)');avshag;

writeln('+');

writeln(ma1,'|',ma2);

write(z1,'|',z2,'|',z3);

end else avshag;

ch:=z3[length(z3)];

if ch='1' then writeln(' m(b)(-',length(mb2),')=1:+m(a)') else writeln(' Z->');

avshag;

avto:=false;

shag:=false;

k:=length(z3);

for i:=k downto 1 do begin

ch:=z3[k];

if ch='1' then

begin

modslog(z1,z2,ma1,ma2,z1,z2);

writeln('+');

writeln(ma1,'|',ma2);

writeln(z1,'|',z2,'|',z3,' Z->');

end;

sdvig;

write(z1,'|',z2,'|',z3);

ch:=z3[k];

if i<>1 then begin

if ch='1' then writeln(' m(b)(-',i,')=1: +m(a)') else writeln(' Z->'); end;

if (chpminy) and (i=1) then begin

mtrue2:=true;

if zs1<>'-' then

modula:=obrcod(modula,mtrue2);

if zs1='-' then modslog(z1,z2,'00',modula,z1,z2)

else modslog(z1,z2,'11',modula,z1,z2);

writeln(' B<0 =>+A^(-)');

writeln('+');

if zs1='-' then writeln('00','|',modula) else writeln('11','|',modula);

write(z1,'|',z2,'|',z3);

end ;

avshag;end;

writeln('');end;

function izdvvdec(s1:string):longint;

var s:string;

i,j,sum,sum2:longint;

begin

s:=s1;

sum:=0;

for i:=length(s)-1 downto 1 do

begin

if s[i]='1' then

begin

sum2:=1;

for j:=1 to length(s)-i do sum2:=sum2*2;

end

else sum2:=0;

sum:=sum+sum2;

end;

if s[length(s)]='1' then inc(sum);

izdvvdec:=sum;

end;

function izdvvdec2(s1:string):string;

var co,i,j,k,n,g,cod:integer; sum,h,e,ns:extended;sr,pos1:string;posd:longint;

begin

sum:=0; e:=1;

for i:=1 to length(s1) do begin

sr:=s1[i];

if sr='1' then begin

ns:=1;

for k:=1 to length(s1)-i do ns:=ns*2; {tut zero !!!}

sum:=sum+(ns);end;

end;

str(sum:0:0,pos1);

izdvvdec2:=pos1;

end;

function dvvdecdrob(s1:string):string;

var co,i,j,k,n,g,cod:integer; sum,h,e,ns:extended;sr,pos2:string;posd:longint;

begin

sum:=0; e:=1;

for i:=1 to length(s1) do begin

sr:=s1[i];

if sr='1' then begin

ns:=1;

for k:=1 to i do ns:=ns*2; {tut zero !!!}

h:=e/ns;

sum:=sum+(h);end;

end;

str(sum:-1:30,pos2);

delete(pos2,1,2);

dvvdecdrob:=pos2;end;

procedure normaliz;

begin

if (nast1<>0)and(nast2<>0) then begin {pri nulE}

if z1='11' then

while z2[1]='1' do begin

delete(z2,1,1); norsdv:=norsdv+1; norzac:=true;

end;

if z1='00' then

while z2[1]='0' do begin

delete(z2,1,1); norsdv:=norsdv+1; norzac:=true;

end;end;end;

procedure posl;

var ch:char; i,k,l:integer; mtrue:boolean;

begin

writeln('');

writeln('мантисса(Z(обр))=',z1,'.',z2);

por1:=izdvvdec(porxs);

por2:=izdvvdec(porys);

por:=por1+por2;

writeln('P(z)=',por1,'+',por2,'=',por);

mtrue:=false ;

if z1='11' then mtrue:=true ;

z2:=obrcod(z2,mtrue);

writeln('mantisa(Z(pr.))=',z1,'.',z2);normaliz;

if norzac then begin

writeln('Сдвиг на ',norsdv,' влево ',z1,'.',z2,

' P(z)=',por,'-',norsdv,'=',por-norsdv)end;

if z1='11' then zn:='-';

writeln('Z=',zn,'0.',z2,'*2^',por-norsdv);

por3:=por-norsdv;

por:=por-norsdv ;

l:=1;

if por>0 then begin

while por<>0 do begin

pos1:=pos1+z2[l]; por:=por-1;l:=l+1;end;

for i:=l to length(z2) do pos2:=pos2+z2[i]; end

else begin

pos1:='0';

pos2:=z2;

while por<>0 do begin

pos2:='0'+pos2; por:=por+1;end;

delete(pos2,63,length(pos2));

{for i:=l to length(z2) do pos2:=pos2+z2[i];}

end;

if (length(pos1)+length(pos2))=por3 then writeln('Z=',zn,pos1) else

writeln('Z=',zn,pos1,'.',pos2);

pos1i:=izdvvdec2(pos1);

pos2i:=dvvdecdrob(pos2);

writeln('Z=',zn,pos1i,'.',pos2i);

{str(pos2i,pos2is); }

pos1i:=pos1i+'.'+pos2i;

val(pos1i,nast1,n);

abspog:=abs(nast-nast1);

writeln('Абсолютная погрешность: ',abspog); {TUT OSHIBKA}

writeln('Относительная погрешность: ',abs(abspog/nast1){nast1:0:5});

if zn<>'-' then

writeln('Истинное значение: ',nast)

else writeln('Истинное значение: -',nast);

end;

procedure rastoch;

begin

nast:=nast1*nast2;

porx:=length(ch1s1dv); pory:=length(ch2s1dv);

porx2:=porx-1; pory2:=pory-1;

porxs:=Dec2Bin(porx); porys:=Dec2Bin(pory);

smeshgen1:=summ('11111111111111',Dec2Bin(porx2));

smeshgen2:=summ('11111111111111',Dec2Bin(pory2));

if ch1s2dv<>'' then writeln('A(в 2-ой СС): ',zs1,ch1s1dv,'.',ch1s2dv )

else writeln('A(в 2-ой СС): ',zs1,ch1s1dv) ;

if ch2s2dv<>'' then writeln('B(в 2-ой СС): ',zs2,ch2s1dv,'.',ch2s2dv)

else writeln('B(в 2-ой СС): ',zs2,ch2s1dv);

writeln('');

if zs1='-' then chpminx:=true;

if zs2='-' then chpminy:=true;

ma2:=ch1s1dv+ch1s2dv;

mb2:=ch2s1dv+ch2s2dv;

if chpminx=true then ma1:='11' else ma1:='00';

if chpminy=true then mb1:='11' else mb1:='00';

doraven(ma2,mb2); modula:=ma2;

writeln('A в расширенной точности');

writeln(ma1[1],'|',smeshgen1,'|',ma2);

writeln('B в расширенной точности');

writeln(mb1[1],'|',smeshgen2,'|',mb2);

writeln('');

end;

begin

shag:=false;

avto:=false;

clrscr;

write('Программа выполняет перевод чисел в формат');

writeln('расширенной точности, и их умножение');

writeln('Пример вводимых данных: 22; 22.333;');

write('Введите число А: ');

Readln(vvS);

DecToBin(vvS,zs1,ch1s1dv,ch1s2dv,nast1);

write('Введите число B: ');

Readln(vvS2);

DecToBin(vvS2,zs2,ch2s1dv,ch2s2dv,nast2);

rastoch;

ma2:=obrcod(ma2,chpminx);

mb2:=obrcod(mb2,chpminy);

writeln('A[обр]: ',ma1[1],'|',smeshgen1,'|',ma2);

writeln('B[обр]: ',mb1[1],'|',smeshgen2,'|',mb2);

writeln('------------------------------');

umnog;

posl;

readln;

end.

Размещено на Allbest.ru


Подобные документы

  • Теоретическое изучение системы проведения арифметических операций над двоичными числами. Создание описания операций умножения и блок-схемы алгоритма её выполнения. Определение набора управляющих сигналов и синтез схемы арифметико-логического устройства.

    курсовая работа [169,3 K], добавлен 25.12.2012

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

    курсовая работа [32,0 K], добавлен 16.08.2012

  • Основные типы модулей, использующиеся в среде программирования Delphi 6. Концепция объектно-ориентированного программирования. Разработка эскизного и технического проектов программы. Алгоритм выполнения операций сложения, вычитания и умножения матриц.

    курсовая работа [559,1 K], добавлен 03.01.2011

  • Проектирование цифрового автомата для выполнения арифметической операции деления двоичных чисел, алгоритм работы. Числа с плавающей запятой. Типы элементов памяти управляющего автомата JK-триггер, не имеющего запрещенных состояний на основных входах.

    курсовая работа [747,4 K], добавлен 25.03.2012

  • Практическое решение технических задач и логического проектирования узлов ЭВМ: операция деления целых чисел в формате "Упакованное десятичное" на сумматоре прямого кода: блок-схемы алгоритма программы и её код. Понятие об инвертировании числа и кода.

    курсовая работа [479,0 K], добавлен 24.06.2012

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

    курсовая работа [287,7 K], добавлен 07.06.2013

  • Составление программы сортировки по возрастанию массив из 20 шестнадцатеричных чисел, просматривающей все исходные числа во внешней памяти и выбирающей самое большое число. Блок-схема алгоритма работы программы. Таблица команд и число их выполнения.

    курсовая работа [23,1 K], добавлен 24.05.2015

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

    реферат [415,8 K], добавлен 29.11.2010

  • Алгоритм умножения двоичных чисел. Выбор и описание структурной схемы операционного автомата. Реализация содержательной граф-схемы алгоритма. Построение отмеченной граф-схемы и структурной таблицы переходов и выходов. Правила кодирования на D-триггерах.

    курсовая работа [273,2 K], добавлен 01.04.2013

  • Анализ технического задания. Разработка программы по вычислению функции на языке ассемблер для микропроцессора Кр580ВМ80. Алгоритмы программного умножения, деления, сложения, вычитания и сдвига влево многобайтных чисел. Расчет времени работы программы.

    курсовая работа [88,2 K], добавлен 19.09.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.