Выполнение операций над операндами с плавающей точкой

ВВЕДЕНИЕ


Арифметические действия над числами с плавающей запятой требуют выполнения, помимо операций над мантиссами, определенных операций над порядками (сравнение, вычитание и др.). Для упрощения операций над порядками их сводят к действиям над целыми положительными числами (целыми числами без знаков), применяя представление чисел с плавающей запятой со «смещенным порядком». Стандарт формата представления чисел с плавающей точкой <#"justify">. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ


.1 Основные форматы данных и их представление


Стандарт IEEE 754 определил два основных формата: с одинарной точностью (32 бита) и с удвоенной точностью (64 бита) рис.1-1. Кроме того, определены вспомогательные расширенные форматы с обычной и с повышенной точностью предназначенные для снижения ошибок округления и использования в промежуточных вычислениях.

Код знака (+) - 0, знака (-) - 1. Коды мантиссы и смещенного порядка двоичные. Основание порядка и мантиссы 2.

При длине поля порядка 8 бит смещение bias=127.

При длине поля порядка 11 бит смещение bias=1023.

Предельные коды в поле порядка, содержащие все нули или все единицы, используют для специальных целей.

Коды от 00…01 до 11…10 включительно кодируют смещенный порядок нормализованного числа.

Так как , то минимальные порядки нормализованных чисел

-в формате с одинарной точностью 1-127= -126;

-в формате с удвоенной точностью 1-1023= -1022.

Так как и , то максимальные порядки нормализованных чисел

-в формате с одинарной точностью 254-127= +127;

-в формате с удвоенной точностью 2046-1023= +1023.



Мантиссу представляют как число без знака. Знак относят ко всему числу. Нормализованная мантисса . Старший разряд нормализованной мантиссы во всех форматах IEEE 754 имеет вес 20 и задан по умолчанию равным 1. В разрядной сетке хранится не мантисса, а разряды ее дробной части (fraction), расположенные справа от запятой. Таким образом, значение нормализованной мантиссы содержит 24 или 53 разряда (на один разряд больше, чем разрядность кода дробной части мантиссы в формате).

Максимальное значение мантиссы нормализованной 1,11…1 и почти равно 2. Минимальное значение нормализованной мантиссы 1,00…0 равно 1.

Если мантисса нормализована, то код смещенного порядка не может быть 11…1 или 00…0.

Ненормализованная мантисса отличается от нормализованной тем, что неявно заданный разряд целого равен 0, а поле дробной части имеет значение отличное от нуля. При этом код в поле смещенного порядка 00…0 и он соответствует минимальному порядку
(-126) или (-1022). Следовательно, минимальный порядок -126 (-1022) представлен двумя кодами в поле смещенного порядка -00…01, если мантисса нормализована;

-00…00, если мантисса ненормализованная.

Код числа равного нулю содержит в полях смещенного порядка и мантиссы 00…0, а в поле знака 0 или 1. Следовательно, число равное нулю может быть представлено в формате как (+0) или как (-0). Этот код можно интерпретировать как ±0,0´2-126 или ±0,0´2-1022 в зависимости от типа формата.

Код в поле смещенного порядка, содержащий 1 во всех битах при нулевой дробной части мантиссы означает, что число равно или в зависимости от содержимого поля знака. Число с этим значением может быть операндом или результатом операции. Бесконечности должны интерпретироваться в единственном смысле, то есть как

< (любое конечное число) <

Код в поле смещенного порядка, содержащий 1 во всех битах при ненулевой дробной части мантиссы означает, что формат содержит нечисловую величину (значения NaN - Not a Number - не число), т.е. символы, закодированные в поле дробной части мантиссы. Стандарт предоставляет конструктору возможность кодировать любую нечисловую информацию по его усмотрению, без каких либо ограничений. Значения NaN используют для записи в формат диагностической информации образующейся в процессе вычислений.



Типы данных представляемых в форматах приведены на рис.1-2.

Бесконечности и NaN могут быть операндами и результатами арифметических операций.

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

-выполняется деление на ноль операнда не равного нулю и отсутствует обработка этой исключительной ситуации, знак бесконечности определяется как сумма по модулю 2 знаков операндов;

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



Если одним из операндов является данное типа бесконечность, а другим - данное одного из первых трех типов, или оба операнда имеют тип бесконечность, то код результата определяют на основании следующих общепринятых правил приведенных в табл.1.1.

При выполнении операций с и с нулями существуют особые случаи. Например, или . В подобных особых случаях результат выполнения операции не является числом и для его представления использован тип не число (NaN).

Различается два подтипа NaN-значений, - сигнализирующее и простое. Оба подтипа в формате с плавающей точкой содержат в поле порядка код 11…1, а в поле мантиссы код отличный от нуля, который стандарт не регламентирует.

Выбор кодов в поле мантиссы для представления простых и сигнализирующих NaN-значений выполняет конструктор конкретной реализации. Не следует использовать бит знака числа как признак для распознавания сигнализирующих или простых NaN-значений, так как операция изменения знака числа изменяет знак NaN. Признаком типа NaN-значений может служить, например старший бит поля дробной части мантиссы.

В формате должны быть представлены хотя бы одно сигнализирующее и хотя бы одно простое NaN.

Оба подтипа могут быть результатами и операндами операции.

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

Значение сигнализирующего NaN удобно присваивать, например неинициализированным переменным, что позволит при попытке выполнить операцию с такой переменой прервать вычисления и выдать сообщение об этом событии. Каждая операция, предполагаемый результат которой является числом с плавающей точкой, должна выдавать простой NaN как ее результат, если при выполнении операции складывается исключительная ситуация невыполнимая операция и обработка по прерыванию не выполняется.

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

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

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


.2 Запись чисел в формат с плавающей точкой


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

-до ближайшего числа;

-до нуля;

-до ;

-до .

Округляют нормализованную мантиссу до точности формата подобно тому, как это делают при округлении числа с фиксированной точкой (раздел 3.3.2).

Если мантисса исходного числа равна нулю, система записи записывает в формат результата код нуля со знаком исходного числа.

Если отбрасываемые при округлении разряды мантиссы не равны нулю, складывается исключительная ситуация потери точности.

Если сохраняемые разряды мантиссы до округления равны 1.11…1 и при округлении необходимо увеличить мантиссу до ближайшей большей, то порядок увеличивают на 1 и принмают мантиссу равной 1.00…0.

Если порядок нормализованного и округленного числа , складывается исключительная ситуация переполнения формата.

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

Если порядок нормализованного и округленного числа и длина цепочки нулей в младших разрядах округленной мантиссы меньше , складывается исключительная ситуация потери значимости. Учтите, что округление округленного результата недопустимо.

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


.3 Вычитание чисел в формате с плавающей точкой


При выполнении операций вычитания необходимы следующие действия:

  1. Произвести выравнивание порядков чисел. Порядок меньшего (по модулю) числа принимается равным порядку большего числа, а мантисса меньшего числа сдвигается вправо на число разрядов, равное разности порядков чисел.
  2. Произвести вычитание мантисс, в результате чего получается мантисса вычитания .
  3. Порядок результата принимается равным порядку большего числа.
  4. Полученная разность нормализуется, выполняются проверки результата на возникновение невыполнимых операций, выполняется округление результата если нужно.

2. ЗАДАНИЕ ДЛЯ КУРСОВОЙ РАБОТЫ


Исходные данные:

.Стандарт IEEE754 (файл рукописи «Основы арифметики ЭВМ»)

Задание на проектирование (ТЗ):

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

Операнды с плавающей точкой представлены в формате стандарта IEEE 754. Результат выполнения операции должен быть присвоен переменной С и удовлетворять требованиям стандарта.

Ваша ГСА должна вычислять результат только при заданных сочетаниях операндов. При иных сочетаниях ГСА должна игнорировать запуск и выходить на КОНЕЦ.

Мой порядковый номер 6.

Тип выполнимой операции:

Вычитание нормализированного и ненормализированного чисел, NAN, бесконечных величин, нулей и их комбинаций.

Оба операнда в формате двойной точности.

плавающий точка число операнд

3. ОПИСАНИЕ АЛГОРИТМА ПРОЦЕССА ВЫПОЛНЕНИЯ ОПЕРАЦИИ


В алгоритме использовались такие переменные:

А, В, С - регистры операндов и результата, размером формата числа с плавающей точкой, двойной точности;

eA, eB, eC - поля смещённого порядка, занимающие 1..11 разряды соответствующих регистров;

mA, mB, mC - поля дробной части мантиссы, занимающие 12..63 разряды, соответствующих регистров;

Fl - 5-ти битовый регистр флагов исключительных ситуаций;[0]=10000 - невыполнимая операция.[1]=01000 - переполнение формата.[2]=00100 - деление на ноль.[3]=00010 - потеря точности.[4]=00001 - потеря значимости.

Bl - 5-ти битовый регистр блокировки обработчика прерывания. Если какой-то из битов установлен в единицу, то не вызывается обработчик прерывания по этой исключительной ситуации;

Pr- вызов обработчика прерывания, в который передаются операнды и значение флагового регитра Fl.

Ниже приведено, поблочное описание алгоритма процесса

Алгоритм процесса выполнения операции представлен в приложении А.

Блок 1 - начало алгоритма.

Блок 2- ввод в вычислительное устройство операндов. Запись их в соответствующие регистры. Далее блок 3.

Блок 3 - установка в ноль всех битов флагового регистра. Флаги предыдущих операций не влияют на текущую. Далее блок 4.

Блок 4 - проверка смещённого порядка операнда А на равенство всех его битов единице. Если условие выполняется, значит А является NaN или бесконечностью и происходит переход в блок 5, иначе А является числом или нулём и происходит переход в блок 18.

Блок 5 - проверка дробной части мантиссы операнда А на равенство всех его битов нулю. Если условие выполняется, значит А является бесконечностью и происходит переход в блок 7, иначе А является NaN и происходит переход в блок 6.

Блок 6 - проверка старшего разряда дробной части мантиссы А. Если он равен единице, то в А записано сигнальное NaN и происходит переход в блок 71, иначе в А записано простое NaN и происходит переход в блок 8. Сигнальное NaN требует вызова обработчика прерывания по исключительной ситуации, а простое - непосредственно копируется в результат.

Блок 7- проверка смещённого порядка операнда В на равенство всех его битов единице. Если условие выполняется, значит В является NaN или бесконечностью и происходит переход в блок 11, иначе В является числом или нулём и происходит переход в блок 9.

Блок 8 - проверка смещенного порядка операнда В на равенство всех его битов единице. Если условие выполняется, значит В является бесконечностью или NAN и происходит переход в блок 10, иначе В является числом или нулем и происходит переход в блок 15.

Блок 9 - присваиваем результат полученный в регистре А операнду в регистре С, в данном случае присваиваем бесконечность, далее блок 149.

Блок 10 - проверка дробной части мантиссы операнда В на равенство всех его битов нулю. Если условие выполняется, значит В является бесконечностью и происходит переход в блок 15, иначе В является NAN и происходит переход в блок 12.

Блок 11 - проверка дробной части мантиссы операнда В на равенство всех его битов нулю. Если условие выполняется, значит В является бесконечностью и происходит переход в блок 14, иначе В является NAN и происходит переход в блок 13.

Блок 12 -проверка старшего разряда дробной части мантиссы операнда В. Если он равен единице, то в Взаписано сигнальное NaN и происходит переход в блок 71, иначе в В записано простое NaN и происходит переход в блок 15.

Блок 13 - проверка старшего разряда дробной части мантиссы операнда В. Если он равен единице, то в Взаписано сигнальное NaN и происходит переход в блок 71, иначе в В записано простое NaN и происходит переход в блок 16.

Блок 14 - проверка знаков операндов А и В, если они равны то складывается невыполнимая операция (две бесконечности с одинаковыми знаками вычитаются) и переходим в блок 71. Если знаки разные то переходим в блок 17.

Блок 15 - присваиваем результат полученный в регистре А операнду в регистре С, в данном случае присваиваем простое NAN, далее блок 149.

Блок 16 - присваиваем результат полученный в регистре B операнду в регистре С, в данном случае присваиваем простое NAN, далее блок 149.

Блок 17 - присваиваем результат полученный в регистре А операнду в регистре С, в данном случае присваиваем бесконечность. Также в данном блоке выполнено нахождение знака результата.

Блок 18 - проверка смещенного порядка операнда В на равенство всех его битов единице. Если условие выполняется, значит В является бесконечностью или NAN и происходит переход в блок 19, иначе В является числом или нулем и происходит переход в блок 20.

Блок 19 - проверка дробной части мантиссы операнда В на равенство всех его битов нулю. Если условие выполняется, значит В является бесконечностью и происходит переход в блок 21, иначе В является NAN и происходит переход в блок 22.

Блок 20 - проверка всех разрядов числа А, за исключением знакового на ноль, если условие выполняется то операнд А является нулем и происходит переход в блок 23, иначе А является числом и переход осуществляется в блок 24.

Блок 21 - проверка знакового разряда операнда В на 1, если условие верно то переходим в блок 25, иначе переходим в блок 26.

Блок 22 - проверка старшего разряда дробной части мантиссы В. Если он равен единице, то в В записано сигнальное NaN и происходит переход в блок 71, иначе в В записано простое NaN и происходит переход в блок 27. Сигнальное NaN требует вызова обработчика прерывания по исключительной ситуации, а простое - непосредственно копируется в результат.

Блок 23 - проверка всех разрядов числа В, за исключением знакового на ноль, если условие выполняется то операнд В является нулем и происходит переход в блок 28, иначе В является числом и переход осуществляется в блок 29.

Блок 24 - проверка всех разрядов числа В, за исключением знакового на ноль, если условие выполняется то операнд В является нулем и происходит переход в блок 30, иначе В является числом и переход осуществляется в блок 36.

Блок 25 - содержимое регистра В присваиваем регистру операнда С, в данном случае присваиваем положительную бесконечность, далее блок 149.

Блок 26 - содержимое регистра В присваиваем регистру операнда С, в данном случае присваиваем отрицательную бесконечность, далее блок 149.

Блок 27 - содержимое регистра В присваиваем регистру операнда С, в данном случае присваиваем простое NAN, далее блок 149.

Блок 28 - проверяем знаковые разряды операнда А и В, если они равны то ноль будет положительным и переходим в блок 35, иначе переходим в блок 31.

Блок 29 - проверка знакового разряда числа В на 1-цу, если условие выполняется то В будет положительным и переходим в блок 32, иначе В будет отрицательным и переходим в блок 33.

Блок 30 - содержимое регистра А присваиваем регистру операнда С, в данном случае присваиваем число, далее блок 149.

Блок 31 - проверка знакового разряда числа А на 1-цу, если условие выполняется то ноль будет отрицательным (-0-0=-0) и переходим в блок 34, иначе ноль будет положительным (0-(-0)=+0) и переход осужествляем в блок 35.

Блок 32 - содержимое регистра В присваиваем регистру операнда С, знак операнда С при этом становится положительным, далее блок 149.

Блок 33 - содержимое регистра В присваиваем регистру операнда С, знак операнда С при этом становится отрицательным, далее блок 149.

Блок 34 - в регистр операнда С записываем отрицательный ноль, далее блок 149.

Блок 35 - в регистр операнда С записываем положительный ноль, далее блок 149.

Блок 36 - проверка на равенство нулю всех разрядов смещенного порядка операнда А, если условие верно то А ненормализованное число и переходим в блок 38, иначе А - нормализованное число и переходим в блок 37.

Блок 37 - проверка на равенство нулю всех разрядов смещенного порядка операнда В, если условие верно то В ненормализованное число и переходим в блок 113, иначе В- нормализованное число и переходим в блок 39.

Блок 38 - проверка на равенство нулю всех разрядов смещенного порядка операнда В, если условие верно то В ненормализованное число и переходим в блок 104, иначе В- нормализованное число и переходим в блок 131.

Блок 39 -проверка на равенство знаковых разрядов операндов А и В, если условие верно то переходим в блок 40, иначе переходим в блок 41.

Блок 40 - проверка на равенство смещенных порядков операнда А и В, если они равны то переходим в блок 43, иначе переходим в блок 44.

Блок 41 - проверка на равенство смещенных порядков операнда А и В, если они равны то переходим в блок 45, иначе переходим в блок 46.

Блок 42 - проверка на равенство знакового разряда операнда А 1-це, если это так то переходим в блок 50, иначе идем к блоку 49.

Блок 43 - если дробная часть мантисс одинакова у обоих операндов, то мы получим 0, перейдя в блок 42, иначе мы перейдем к сравнению мантисс перейдя в блок 51.

Блок 44 - сравнение смещенных порядков А и В, если смещенный порядок операнда А больше смещенного порядка операнда В то переходим в блок 47, иначе перейдем в блок 48.

Блок 45 - проверка знакового разряда операнда А на равенство 1-це,

если условие выполняется то переходим в блок 52, иначе переходим в блок 53.

Блок 46 - сравнение смещенных порядков операндов А и В, если смещенный порядок первого операнда больше другого то переходим в блок 91, иначе переходим в блок 92.

Блок 47 - регистру операнда С присваиваем в качестве знакового разряда результат выполнения операции суммы по модулю два 0 и знакового разряда операнда А, после этого переходим в блок 75.

Блок 48 - регистру операнда С присваиваем в качестве знакового разряда результат выполнения операции суммы по модулю два 1 и знакового разряда операнда А, после этого переходим в блок 76.

Блок 49 -регистру операнда С присваиваем положительный ноль, далее блок 149.

Блок 50 - регистру операнда С присваиваем отрицательный ноль, далее блок 149.

Блок 51 - сравниваются дробные части мантисс операндов А и В, если мантисса операнда А больше мантиссы операнда В то перейдем к блок 55, иначе перейдем в блок 54.

Блок 52 - число будет положительным, далее блок 56.

Блок 53 - число будет отрицательным, далее блок 56.

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

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

Блок 56 - в разряды дробной части мантиссы и младший разряд порядка записывается сумма дробных частей мантисс второго и первого операндов с приписанными спереди единицами, которые являются целыми частями мантисс, далее блок 58.

Блок 57 - поверка младшего разряда порядка на наличие единицы. Если условие выполняется, результат выровнен до нормализованного вида и происходит переход в блок 64, иначе нужно выполнить сдвиг мантиссы влево и уменьшение порядка, происходит переход в блок 59.

Блок 58 - проверка разряда C[10]. Если он равен единице, нужно выполнить проверку на переполнение формата и выравнивание результата и происходит переход в блок 60, иначе результат почти записан и происходит переход в блок 68.

Блок 59 - дробная часть мантиссы сдвигается на один разряд влево, старший разряд мантиссы переходит на младший разряд порядка. Порядок уменьшается на единицу. Далее блок 61.

Блок 60 - проверка порядка результата на равенство максимально возможному порядку числа. Если условие выполняется, возникает исключительная ситуация «переполнение формата» и происходит переход в блок 63, иначе достаточно выровнять результат, происходит переход в блок 62.

Блок 61 - проверка смещённого порядка результата записанного в регистре операнда А на равенство всех его битов нулю. Если условие выполняется, значит порядок результата минимален и результат будет записано ненормализованное число, происходит переход в блок 64, иначе можно продолжить выравнивание результата и происходит переход в блок 57.

Блок 62 - флаг исключительной ситуации «потеря точности» становится равен младшему разряду результата, который при выравнивании будет выдвинут за пределы формата. Исключительная ситуация «потеря точности» возникает, если хотя бы один ненулевой разряд выходит за пределы формата. Результат сдвигается вправо на один разряд. Порядок увеличивается на единицу. Далее блок 65.

Блок 63 - флаг исключительной ситуации «переполнение формата» Fl [1] устанавливается в единицу. Далее блок 67.

Блок 64 - порядок результата записывается в регистр результата. Результат записан. Далее блок 149.

Блок 65 - проверка флага исключительной ситуации «потеря точности». Если он равен не равен единице происходит переход в блок 66, иначе результат записан и происходит переход в блок 149.

Блок 66 - проверка третьего разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «потеря точности» и считается, что результат записан, происходит переход в блок 149, иначе выполняется обработка прерывания и происходит переход в блок 69.

Блок 67 - проверка первого разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «переполнение формата» и записываем в результат бесконечность, происходит переход в блок 70, иначе выполняется обработка прерывания и происходит переход в блок 69.

Блок 68 - в регистр результата записывается порядок результата находящийся в регистре операнда А. Далее блок 149.

Блок 69 - вызов обработчика прерывания, далее блок 150.

Блок 70 - в регистр результата С записывается плюс бесконечность со знаком операнда А, который соответствует сумме операндов в данном случае, далее блок 149.

Блок 71 - флагу невыполнимой операции присваиваем единицу, далее блок 72

Блок 72 - если регистр блокировки обработчика прерывания равен 1, то переходим в блок 73, иначе переходим в блок 74.

Блок 73 - в регистр операнда С записываем простое NAN, далее блок 149.

Блок 74 - вызов обработчика прерывания, далее блок 150.

Блок 75 - так как порядок А больше порядка В нужно сделать первый шаг выравнивания. Порядок В увеличивается на единицу, в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Таким образом установив значение флага в единицу, его значение не сменится на ноль. Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записана единица, которая неявно задана как целая часть мантиссы операнда. Далее блок 77.

Блок 76 - так как порядок В больше порядка А нужно сделать первый шаг выравнивания. Порядок А увеличивается на единицу, в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записана единица, которая неявно задана как целая часть мантиссы операнда. Далее блок 78.

Блок 77 - проверка смещённых порядков операндов на равенство. Если условие выполняется, порядки выровнены и происходит переход в блок 81, иначе нужно продолжать выравнивание, и происходит переход в блок 79.

Блок 78 - проверка смещённых порядков операндов на равенство. Если условие выполняется, порядки выровнены и происходит переход в блок 82, иначе нужно продолжать выравнивание, и происходит переход в блок 80.

Блок 79 - продолжается выравнивание. Порядок В увеличивается на единицу, в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Мантисса сдвигается на разряд влево, в старший бит дробной части мантиссы будет записан ноль, так как целая часть мантиссы уже сдвинута. Далее блок 77.

Блок 80 - продолжается выравнивание. Порядок А увеличивается на единицу, в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата Мантисса сдвигается на разряд влево, в старший бит дробной части мантиссы будет записан ноль, так как целая часть мантиссы уже сдвинута. Далее блок 78.

Блок 81 - проверка флага исключительной ситуации «потеря точности». Если он равен нулю находится разность операндов происходит переход в блок 83, иначе происходит переход в блок 84.

Блок 82 - проверка флага исключительной ситуации «потеря точности». Если он равен нулю находится разность операндов происходит переход в блок 86, иначе происходит переход в блок 85.

Блок 83 - в разряды дробной части мантиссы и младший разряд порядка записывается разность дробных частей мантисс первого и второго операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Далее блок 57.

Блок 84 - проверка третьего разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «потеря точности», происходит переход в блок 87, иначе выполняется обработка прерывания и происходит переход в блок 88.

Блок 85 - проверка третьего разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «потеря точности», происходит переход в блок 89, иначе выполняется обработка прерывания и происходит переход в блок 88.

Блок 86 - в разряды дробной части мантиссы и младший разряд порядка записывается разность дробных частей мантисс второго и первого операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Далее блок 57.

Блок 87 - в разряды дробной части мантиссы и младший разряд порядка записывается разность дробных частей мантисс первого и второго операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Далее блок 57.

Блок 88 - вызов обработчика прерывания, далее блок 150.

Блок 89 - в разряды дробной части мантиссы и младший разряд порядка записывается разность дробных частей мантисс второго и первого операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Далее блок 57.

Блок 90 - проверка мантиссы результата на наличие во всех битах нуля. Если условие выполняется, в результат нужно записать ноль и происходит переход в блок 42, иначе возможно нужно выравнивать результат и происходит переход в блок 57.

Блок 91 - так как порядок А больше порядка В нужно сделать первый шаг выравнивания. Порядок В увеличивается на единицу ,в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записана единица, которая неявно задана как целая часть мантиссы операнда. Далее блок 93.

Блок 92 - так как порядок В больше порядка А нужно сделать первый шаг выравнивания. Порядок А увеличивается на единицу ,в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записана единица, которая неявно задана как целая часть мантиссы операнда. Далее блок 94.

Блок 93 - проверка смещённых порядков операндов на равенство. Если условие выполняется, порядки выровнены и происходит переход в блок 97, иначе нужно продолжать выравнивание и происходит переход в блок 95.

Блок 94 - проверка смещённых порядков операндов на равенство. Если условие выполняется, порядки выровнены и происходит переход в блок 98, иначе нужно продолжать выравнивание и происходит переход в блок 96.

Блок 95 - продолжается выравнивание. Порядок В увеличивается на единицу ,в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записан ноль, так как целая часть мантиссы уже сдвинута. Далее блок 93.

Блок 96 - продолжается выравнивание. Порядок А увеличивается на единицу ,в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записан ноль, так как целая часть мантиссы уже сдвинута. Далее блок 94.

Блок 97 - проверка флага исключительной ситуации «потеря точности». Если он равен нулю происходит переход в блок 101, иначе происходит переход в блок 99.

Блок 98 - проверка флага исключительной ситуации «потеря точности». Если он равен нулю происходит переход в блок 103, иначе происходит переход в блок 100.

Блок 99 - проверка третьего разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «потеря точности» и происходит переход в блок 101, иначе выполняется обработка прерывания и происходит переход в блок 102.

Блок 100 - проверка третьего разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «потеря точности» и происходит переход в блок 103, иначе выполняется обработка прерывания и происходит переход в блок 102.

Блок 101 - в разряды дробной части мантиссы и два младших разряда порядка записывается сумма дробных частей мантисс операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Разряд С[10] необходима для выявления переполнения суммы мантисс. Далее блок 58.

Блок 102 - вызов обработчика прерывания, далее блок 150.

Блок 103 - в разряды дробной части мантиссы и два младших разряда порядка записывается сумма дробных частей мантисс операндов с приписанными спереди нулём и единицей, которые являются целыми частями мантисс. Разряд С[10] необходима для выявления переполнения суммы мантисс. Далее блок 58.

Блок 104 - сравниваются знаковые разряды операндов, если они равны то переходим в блок 105, иначе идем в блок 106.

Блок 105 - сравниваются мантиссы операндов, если они равны то мы получим ноль и для определения знака переходим в блок 42, иначе переходим в блок 107.

Блок 106 - проверка знакового разряда операнда А на равенство единице, если условие верно, то переходим в блок 108, иначе переходим в блок 109.

Блок 107 - сравнение дробных частей мантисс, если дробная часть мантиссы операнда А меньше дробной части мантиссы операнда В то переходим в блок 110, иначе идем в блок 111.

Блок 108- результат в регистре операнда С будет отрицательным, далее блок 112.

Блок 109- результат в регистре операнда С будет положительным, далее блок 112.

Блок 110- определяем знак числа, все разряды смещенного порядка операнда С равны нулю, т.к. получаем ненормализированное число, дробная часть мантиссы операнда С равняется разности мантисс двух операндов (мантиссу второго операнда отнимаем мантиссу первого операнда), далее блок 149.

Блок 111- определяем знак числа, все разряды смещенного порядка операнда С равны нулю, т.к. получаем ненормализированное число, дробная часть мантиссы операнда С равняется разности мантисс двух операндов (мантиссу первого операнда отнимаем мантиссу второго операнда), далее блок 149.

Блок 112- все разряды смещенного порядка операнда С равны нулю, т.к. получаем ненормализированное число, дробная часть мантиссы операнда С равняется сумме мантисс двух операндов, далее блок 149.

Блок 113- проверка, когда смещенный порядок нормализированного операнда А минус bias=1023 в двоичной системе больше количества разрядов мантиссы (52+1), то мы сразу сможем записать в результат операнд А, перейдя в блок 114, если эта проверка не проходит то переходим в блок 115.

Блок 114- в регистр операнда С заносим операнд А.

Блок 115- проверка на равенство знаковых разрядов двух операндов, если они равны то переходим в блок 116, иначе переходим в блок 117.

Блок 116- так как порядок А больше порядка В нужно сделать первый шаг выравнивания. Порядок В увеличивается на единицу, в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Таким образом установив значение флага в единицу, его значение не сменится на ноль. Мантисса сдвигается на разряд вправо, в старший бит дробной части мантиссы будет записана единица, которая неявно задана как целая часть мантиссы операнда. Далее блок 120.

Блок 117- проверка на равенство знакового разряда операнда А единице, если условие верно, то переходим в блок 118, иначе блок 119.

Блок 118- результат будет положительным, далее блок 91.

Блок 119-результат будет отрицательным, далее блок 91.

Блок 120 - проверка смещённых порядков операндов на равенство. Если условие выполняется, порядки выровнены и происходит переход в блок 122, иначе нужно продолжать выравнивание, и происходит переход в блок 121.

Блок 121- продолжается выравнивание. Порядок В увеличивается на единицу, в бит флагового регистра соответствующий исключительной ситуации «потеря точности» записывается дизъюнкция его предыдущего значения и младшего разряда мантиссы, который будет выдвинут за пределы формата. Мантисса сдвигается на разряд влево, в старший бит дробной части мантиссы будет записан ноль, так как целая часть мантиссы уже сдвинута. Далее блок 120.

Блок 122 - проверка флага исключительной ситуации «потеря точности». Если он равен нулю находится разность операндов происходит переход в блок 123, иначе происходит переход в блок 124.

Блок 123 - в разряды дробной части мантиссы и младший разряд порядка записывается разность дробных частей мантисс первого и второго операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Далее блок 127.

Блок 124 - проверка третьего разряда регистра Bl. Если он равен единице, то блокируется обработка прерывания по исключительной ситуации «потеря точности», происходит переход в блок 125, иначе выполняется обработка прерывания и происходит переход в блок 126.

Блок 125 - в разряды дробной части мантиссы и младший разряд порядка записывается разность дробных частей мантисс первого и второго операндов с приписанными спереди единицей и нулём, которые являются целыми частями мантисс. Далее блок 127.

Блок 126 - вызов обработчика прерывания, далее блок 150.

Блок 127 - сравнение мантисс обоих операндов, если они равны то переходим в блок 42, иначе идем в блок 127.

Блок 128 - сравнение мантисс обоих операндов, и в зависимости от результата мы будем переходить в блок 129 и блок 130, в которых мы будем вычислять знак операнда С, и после этих блоков мы будем переходить в блок 57.

Блоки 129,130 - определяем знак операнда С через операцию суммы по модулю два.

Блоки 131-148 - разработаны по аналогии с блоками 113-130 но только для ситуации когда операнд В нормализированный а операнд А ненормализированный.

Блок 149- вывод операнда С.

Блок 150 - конец алгоритма.


ВЫВОД


Арифметические действия над числами с плавающей запятой требуют выполнения, помимо операций над мантиссами, определенных операций над порядками (сравнение, вычитание и др.). Для упрощения операций над порядками их сводят к действиям над целыми положительными числами (целыми числами без знаков), применяя представление чисел с плавающей запятой со «смещенным порядком». В специализированных ЦВМ и всякого рода простейших вычислителях форматы с фиксированной точкой применяют не только для хранения целых чисел, а и для хранения действительных чисел, причем используют представление чисел в различных кодах.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ


.Стандарт IEEЕ-754 «Операции над числами с плавающей точкой»;

.Стандарт IEEЕ-754 «Арифметические операции над числами в форматах с фиксированной точкой».


Теги: Выполнение операций над операндами с плавающей точкой  Курсовая работа (теория)  Информационное обеспечение, программирование
Просмотров: 19995
Найти в Wikkipedia статьи с фразой: Выполнение операций над операндами с плавающей точкой
Назад