Алгоритм выполнения операций умножения двоичных чисел
Разработка алгоритма выполнения операций умножения двоичных чисел в формате расширенной точности на сумматоре обратного кода. Преобразование входной строки в десятичное число. Разработка алгоритма арифметической операции. Тестирование программы-эмулятора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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