double arrow
Форматы хранения чисел с плавающей точкой

Типы значений с плавающей точкой Real, Single, Double, Extended и Comp (вещественный, с одинарной точностью, с двойной точностью, с повышенной точностью и сложный) хранятся в виде двоичного представления знака (+ или -), показателя степени и значащей части числа. Представляемое число имеет значение:

+/- значащая_часть Х 2^показатель_степени
где значащая часть числа представляет собой отдельный бит слева от двоичной десятичной точки (то есть 0 <= значащая часть <= 2).

Пример: Вещественный тип

Шестибайтовое (48-битовое) вещественное число (Real) подразделяется на три поля:

1 39 8 +---+------..-------+--------+ | s | f | e | +---+------..-------+--------+ msb lsb msb lsb Значение v числа определяется с помощью выражений: if 0 < e <= 255, then v = (-1)^s * 2^(e-129)*(l.f). if e = 0, then v = 0.

В схеме слева расположены старшие значащие биты, а справа - младшие значащие биты. Самое левое значение хранится в самых старших адресах. Например, для значения вещественного типа e сохраняется в первом байте, f- в следующих пяти байтах, а s - в старшем значащем бите последнего байта.


Практическая разработка.

Описание алгоритма решения задач.

Для решения поставленной задачи необходимо сравнить два числа с плавающей точкой, которые представлены в виде четырех байт.

В данной работе необходимо сравнить числа по модулю, знак в данном случае нас не интересует. Для получения модулей чисел. Проделав данную операцию, мы будем располагать двумя положительными числами, сравнение которых будет осуществлять побайтно. Вначале будут сравниваться старшие байты, рассматриваемых чисел, если они равны, будем переходить к сравнению следующих байт и т.д. В случае, когда все до последнего байта равны, то в ячейку 700016 помещаем код 00. Если же числа не равны, тогда в ячейку 700016 формируем код 01 ( левое число больше правого) или же код 02 ( правое число больше левого). В данной работе для избегания повторения одних и тех же действий с разными байтами, я использую счетчик цикла.




Распределение памяти:

L – счетчик цикла

DB,C – содержат текущий байт первого числа

D,E – содержат текущий байт второго числа

H – содержат значение текущего байта второго числа

A – содержат значение текущего байта первого числа

H,L – временное хранение значения адреса старшего байта второго числа, с последующим перемещением в пару D,E.






Сейчас читают про: