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

 

Оглавление


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

. Введение

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

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

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

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

. Вывод

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

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


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


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

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

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


2. Введение


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

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

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

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

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

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

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

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

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

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


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. Представить целую часть вещественного числа в двоичном виде и поставить после нее десятичную точку.

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

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

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

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

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

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



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



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


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

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

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

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

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

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

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

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

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

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

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

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

.5610= 0.10001111010111000010100011110101110000101011100001011100012.

45.5610=101101.10001111010111000010100011110101110000101011100001011100012.

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

.011011000111101011100001010001111010111000010101110000101110001*25.

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


010000000000001011011000111101011100001010001111010111000010101110000101110001Sпорядокмантисса

.10001111010111000010100011110101110000101011100001011100012= 45.559999999999999998

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

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

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


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


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

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

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

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

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

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


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


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


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


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

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

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

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

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

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


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



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



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

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


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


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



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


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

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

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


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



После ввода В



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

Нажмём ?



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


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

Введите число А: 1(в 2-ой СС): 1111111111111111111111111111111111111111111111111111111111111111(в 2-ой СС): 1в расширенной точности

|100000000111110|1111111111111111111111111111111111111111111111111111111111111111в расширенной точности

|11111111111111|1000000000000000000000000000000000000000000000000000000000000000[обр]: 0|100000000111110|1111111111111111111111111111111111111111111111111111111111111111[обр]: 0|11111111111111|1000000000000000000000000000000000000000000000000000000000000000

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

|0000000000000000000000000000000000000000000000000000000000000000|1000000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0100000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0010000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0001000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000100000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000010000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000001000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000100000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000010000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000001000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000100000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000010000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000001000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000100000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000010000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000001000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000100000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000010000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000001000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000100000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000010000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000001000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000100000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000010000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000001000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000100000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000010000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000001000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000100000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000010000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000001000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000100000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000010000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000001000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000100000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000010000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000001000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000100000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000010000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000001000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000100000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000010000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000001000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000100000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000010000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000001000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000100000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000010000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000001000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000100000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000010000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000001000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000100000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000010000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000001000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000100000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000010000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000001000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000100000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000010000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000001000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000100 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000010 Z->

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

+

|1111111111111111111111111111111111111111111111111111111111111111

|1111111111111111111111111111111111111111111111111111111111111111|0000000000000000000000000000000000000000000000000000000000000001 Z->

|0111111111111111111111111111111111111111111111111111111111111111|1000000000000000000000000000000000000000000000000000000000000000

мантисса(Z(обр))=00.0111111111111111111111111111111111111111111111111111111111111111(z)=64+1=65(Z(pr.))=00.0111111111111111111111111111111111111111111111111111111111111111

Сдвиг на 1 влево 00.111111111111111111111111111111111111111111111111111111111111111 P(z)=65-1=64=0.111111111111111111111111111111111111111111111111111111111111111*2^64=1111111111111111111111111111111111111111111111111111111111111111=18446744073709551600.000000000000000000

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

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

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

)

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

Введите число В: 2(в 2-ой СС): 0.000000000000000000000000000000000011011011111001101111111011001(в 2-ой СС): 10в расширенной точности

|11111111111111|0000000000000000000000000000000000011011011111001101111111011001в расширенной точности

|100000000000000|1000000000000000000000000000000000000000000000000000000000000000[обр]: 0|11111111111111|0000000000000000000000000000000000011011011111001101111111011001[обр]: 0|100000000000000|1000000000000000000000000000000000000000000000000000000000000000

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

|0000000000000000000000000000000000000000000000000000000000000000|1000000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0100000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0010000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0001000000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000100000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000010000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000001000000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000100000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000010000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000001000000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000100000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000010000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000001000000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000100000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000010000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000001000000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000100000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000010000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000001000000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000100000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000010000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000001000000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000100000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000010000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000001000000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000100000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000010000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000001000000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000100000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000010000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000001000000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000100000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000010000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000001000000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000100000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000010000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000001000000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000100000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000010000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000001000000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000100000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000010000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000001000000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000100000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000010000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000001000000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000100000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000010000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000001000000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000100000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000010000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000001000000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000100000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000010000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000001000000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000100000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000010000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000001000000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000100000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000010000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000001000 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000100 Z->

|0000000000000000000000000000000000000000000000000000000000000000|0000000000000000000000000000000000000000000000000000000000000010 Z->

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

+

|0000000000000000000000000000000000011011011111001101111111011001

|0000000000000000000000000000000000011011011111001101111111011001|0000000000000000000000000000000000000000000000000000000000000001 Z->

|0000000000000000000000000000000000001101101111100110111111101100|1000000000000000000000000000000000000000000000000000000000000000

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

P(z)=1+2=3(Z(pr.))=00.0000000000000000000000000000000000001101101111100110111111101100

Сдвиг на 36 влево 00.1101101111100110111111101100 P(z)=3-36=-33=0.1101101111100110111111101100*2^-33=0.0000000000000000000000000000000001101101111100110111111101100=0.000000000100000000

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

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

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


Вывод


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


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


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

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


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


{$N+}kjhsg;crt;n,ai:integer; as,as1,as2,vvs,vvs2,zs1,zs2:string; ach,zn:char;s1,ch1s2,ch2s1,ch2s2:string; ch1s1dv,ch2s1dv,ch1s2dv,ch2s2dv:string;n2,ch2n2:longint;n1,ch2n1:extended;,avto:boolean;,porx,pory,porx2,pory2:integer;porxs,porys:string;,chpy:string;,chpminy,norzac:boolean;,ma2,ma3,mb1,mb2,mb3:string;,z2,z3,mz1,mz2,mz3:string;:string;,por2,por,por3,norsdv:longint;,pos2,pos1i,pos2is,pos2i:string;,nast,nast1,nast2,abspog:extended;,smeshgen2:string;avshag;chk:char;avto=false then begin:=readkey;readkey of

#75:shag:=true;

#77:avto:=true;;;;DecToBin(const aStr : String;var zs,s1,s2:string;var nst:extended);= 10;= 2;, PosDot,aq,tochnost: Integer;, vStr, StrSign, StrDot,as1q,as2q : String;, TmpNum, Weight : Extended; cel:boolean;aStr = '' then Exit;aStr[1] = '-' then begin:= '-';:= Copy(aStr, 2, Length(aStr) - 1);else begin:= '';:= aStr;;:=StrSign;:= Length(vStr) + 1;i := 1 to Length(vStr) do beginvStr[i]='.' then begin:= i;;;;:= 0;:= 1;i := PosDot - 1 downto 1 do beginvStr[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;;:= Weight * BaseIn;;:= 1 / BaseIn;i := PosDot + 1 to Length(vStr) do beginvStr[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;;:= Weight / BaseIn;;:=num;:= '';:=64;:= Int(Num);Round( TmpNum - Int(TmpNum / BaseOut) * BaseOut ) of

: StrRes := '0' + StrRes;

: StrRes := '1' + StrRes;;:= Int(TmpNum / BaseOut);:=tochnost-1;TmpNum = 0;:= 0;:=true;:= Frac(Num);(TmpNum <> 0) and (tochnost> i) do begin:=false;i = 0 then StrRes := StrRes + '.';:= TmpNum * BaseOut;Round(Int(TmpNum)) of

: StrRes := StrRes + '0';

: StrRes := StrRes + '1';;:= Frac(TmpNum);(i);;:=1;q:='';q:='';cel=false then begin(StrRes[aq]<>'.') do beginq:=as1q+StrRes[aq]; aq:=aq+1; end; aq:=aq+1;q:=copy(StrRes,aq,length(StrRes)-1);:=as1q;:=as2q;else begin s1:=StrRes; s2:=''; end;;Dec2Bin(a:integer):string;:integer;,j:string;a=0 then begin Dec2Bin:='0'; exit end;:='';a<>0 do:=a mod 2;(i,j);:=j+as;:=a div 2;;Bin:=as;;dr2bin(ds:string):string;i:integer; rs,tp:real;ds='0' then begin dr2bin:='0'; exit end;:='0.'+ds;(ds,rs,i);i:=0;:='';:=rs;(tp<>0)and(tochn>i)do begin:=tp*2;round(int(tp)) of

:ds:=ds+'0';

:ds:=ds+'1';;:=frac(tp);(i);;bin:=ds;;obrcod(os:string;minss:boolean):string;i,j,n,k:integer; dos:string;minss=false then begin obrcod:=os; exit; end;:=length(os);i:=1 to n doos[i]='1' then os[i]:='0' else os[i]:='1';:=os;;doraven(var rs1,rs2:string);length(rs1)<64 do rs1:=rs1+'0';length(rs2)<64 do rs2:=rs2+'0';;summ(a,b:string):string;,vume:string;,n:integer;:='';:='0';length(a)<>length(b) dolength(a)>length(b) then:='0'+b;length(a)<length(b) then:='0'+a;;i:=length(a) downto 1 do(a[i]='0') and (b[i]='0') then:=vume+c;:='0';(a[i]='1') and (b[i]='1') then:=vume+c;:='1';(a[i]='1') or (b[i]='1') thenvume='0' then:='1'+c:='0'+c;;;vume<>'0' then c:=vume+c;:=c;;modslog(mpa1,mpa2,mpb1,mpb2:string;var ms1,ms2:string);:char;,i:integer;:=summ(mpa2,mpb2);:=summ(mpa1,mpb1);length(ms2)>length(mpa2) then begin:=summ(ms1,'1'); delete(ms2,1,1) ; end;length(ms1)>2 then begin ms2:=summ(ms2,'1'); delete(ms1,1,1);end;;sdvig;ch1:char; i,n:integer;(z1,n,i);n of

:begin z1:='00';ch1:=z2[length(z2)];(z2,length(z2),1); z2:='0'+z2;(z3,length(z3),1); z3:=ch1+z3; end;

: begin:='00';ch1:=z2[length(z2)];(z2,length(z2),1); z2:='1'+z2;(z3,length(z3),1); z3:=ch1+z3;end;

: begin:='11';ch1:=z2[length(z2)];(z2,length(z2),1); z2:='0'+z2;(z3,length(z3),1); z3:=ch1+z3;end;

: begin z1:='11';ch1:=z2[length(z2)];(z2,length(z2),1); z2:='1'+z2;(z3,length(z3),1); z3:=ch1+z3; end;;;umnog;ch,chk:char; i,k,n:integer;shag,avto,mtrue2:boolean;n:=1 to length(mb2) do z2:=z2+'0';:='00'; z3:=mb2;(z1,'|',z2,'|',z3) ;chpminy then begin modslog(z1,z2,ma1,ma2,z1,z2); mz3:=z3;(' B<0 =>+A*2^(-n)');avshag;('+');(ma1,'|',ma2);(z1,'|',z2,'|',z3);else avshag;:=z3[length(z3)];ch='1' then writeln(' m(b)(-',length(mb2),')=1:+m(a)') else writeln(' Z->');;:=false;:=false;:=length(z3);i:=k downto 1 do begin:=z3[k];ch='1' then(z1,z2,ma1,ma2,z1,z2);('+');(ma1,'|',ma2);(z1,'|',z2,'|',z3,' Z->');;;(z1,'|',z2,'|',z3);:=z3[k];i<>1 then beginch='1' then writeln(' m(b)(-',i,')=1: +m(a)') else writeln(' Z->'); end;(chpminy) and (i=1) then begin:=true;zs1<>'-' then:=obrcod(modula,mtrue2);zs1='-' then modslog(z1,z2,'00',modula,z1,z2)modslog(z1,z2,'11',modula,z1,z2);(' B<0 =>+A^(-)');('+');zs1='-' then writeln('00','|',modula) else writeln('11','|',modula);(z1,'|',z2,'|',z3);;;end;('');end;izdvvdec(s1:string):longint;s:string;,j,sum,sum2:longint;:=s1;:=0;i:=length(s)-1 downto 1 dos[i]='1' then:=1;j:=1 to length(s)-i do sum2:=sum2*2;sum2:=0;:=sum+sum2;;s[length(s)]='1' then inc(sum);:=sum;;izdvvdec2(s1:string):string;co,i,j,k,n,g,cod:integer; sum,h,e,ns:extended;sr,pos1:string;posd:longint;:=0; e:=1;i:=1 to length(s1) do begin:=s1[i];sr='1' then begin:=1;k:=1 to length(s1)-i do ns:=ns*2; {tut zero !!!}:=sum+(ns);end;;(sum:0:0,pos1);:=pos1;;dvvdecdrob(s1:string):string;co,i,j,k,n,g,cod:integer; sum,h,e,ns:extended;sr,pos2:string;posd:longint;:=0; e:=1;i:=1 to length(s1) do begin:=s1[i];sr='1' then begin:=1;k:=1 to i do ns:=ns*2; {tut zero !!!}:=e/ns;:=sum+(h);end;;(sum:-1:30,pos2);(pos2,1,2);:=pos2;end;normaliz;(nast1<>0)and(nast2<>0) then begin {pri nulE}z1='11' thenz2[1]='1' do begin(z2,1,1); norsdv:=norsdv+1; norzac:=true;;z1='00' thenz2[1]='0' do begin(z2,1,1); norsdv:=norsdv+1; norzac:=true;;end;end;posl;ch:char; i,k,l:integer; mtrue:boolean;('');('мантисса(Z(обр))=',z1,'.',z2);:=izdvvdec(porxs);:=izdvvdec(porys);:=por1+por2;('P(z)=',por1,'+',por2,'=',por);:=false ;z1='11' then mtrue:=true ;:=obrcod(z2,mtrue);('mantisa(Z(pr.))=',z1,'.',z2);normaliz;norzac then begin('Сдвиг на ',norsdv,' влево ',z1,'.',z2,

' P(z)=',por,'-',norsdv,'=',por-norsdv)end;z1='11' then zn:='-';('Z=',zn,'0.',z2,'*2^',por-norsdv);:=por-norsdv;:=por-norsdv ;:=1;por>0 then beginpor<>0 do begin:=pos1+z2[l]; por:=por-1;l:=l+1;end;i:=l to length(z2) do pos2:=pos2+z2[i]; endbegin:='0';:=z2;por<>0 do begin:='0'+pos2; por:=por+1;end;(pos2,63,length(pos2));

{for i:=l to length(z2) do pos2:=pos2+z2[i];};(length(pos1)+length(pos2))=por3 then writeln('Z=',zn,pos1) else('Z=',zn,pos1,'.',pos2);i:=izdvvdec2(pos1);i:=dvvdecdrob(pos2);('Z=',zn,pos1i,'.',pos2i);

{str(pos2i,pos2is); }i:=pos1i+'.'+pos2i;(pos1i,nast1,n);:=abs(nast-nast1);('Абсолютная погрешность: ',abspog); {TUT OSHIBKA}('Относительная погрешность: ',abs(abspog/nast1){nast1:0:5});zn<>'-' then('Истинное значение: ',nast)writeln('Истинное значение: -',nast);;rastoch;:=nast1*nast2;:=length(ch1s1dv); pory:=length(ch2s1dv);:=porx-1; pory2:=pory-1;:=Dec2Bin(porx); porys:=Dec2Bin(pory);:=summ('11111111111111',Dec2Bin(porx2));:=summ('11111111111111',Dec2Bin(pory2));ch1s2dv<>'' then writeln('A(в 2-ой СС): ',zs1,ch1s1dv,'.',ch1s2dv )writeln('A(в 2-ой СС): ',zs1,ch1s1dv) ;ch2s2dv<>'' then writeln('B(в 2-ой СС): ',zs2,ch2s1dv,'.',ch2s2dv)writeln('B(в 2-ой СС): ',zs2,ch2s1dv);('');zs1='-' then chpminx:=true;zs2='-' then chpminy:=true;:=ch1s1dv+ch1s2dv;:=ch2s1dv+ch2s2dv;chpminx=true then ma1:='11' else ma1:='00';chpminy=true then mb1:='11' else mb1:='00';(ma2,mb2); modula:=ma2;

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

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

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

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

avto:=false;;('Программа выполняет перевод чисел в формат');('расширенной точности, и их умножение');('Пример вводимых данных: 22; 22.333;');('Введите число А: ');

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

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

Readln(vvS2);(vvS2,zs2,ch2s1dv,ch2s2dv,nast2);;:=obrcod(ma2,chpminx);:=obrcod(mb2,chpminy);('A[обр]: ',ma1[1],'|',smeshgen1,'|',ma2);('B[обр]: ',mb1[1],'|',smeshgen2,'|',mb2);('------------------------------');;;

readln;.


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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ