Контрольная работа: Числовая и нечисловая обработка информации
1. Проверка на нуль.
2. Сдвиг мантисс для выравнивания порядков.
3. Суммирование или вычитание мантисс.
4. Нормализация результата.
Детальный пошаговый анализ этого алгоритма покажет, какие функции используются при выполнении операций сложения и вычитания чисел в формате с плавающей точкой. В дальнейшем для определенности будем считать, что используется формат регламентированный стандартом IEEE 754. Перед началом выполнения операций операнды должны быть помещены в регистры АЛУ. Если в используемом формате с плавающей точкой предполагается неявный старший разряд мантиссы, этот разряд должен быть в явном виде включен в регистры операндов, и все операции с ним в дальнейшем будут проводиться точно так как и с остальными разрядами мантиссы. Поскольку операции сложения и вычитания отличаются только тем, что при вычитании предварительно изменяется знак второго операнда (вычитаемого), эта операция включена в ветвь вычитание на схеме алгоритма: после чего обе ветви сливаются. Далее анализируется, не равен ли один из операндов нулю. Если это так, то результат — значение второго операнда. Очевидно, что нельзя просто сложить мантиссы этих двух чисел. Нужно выровнять разрядные сетки мантисс так, чтобы соответственные разряды (разряды с равным весом) занимали одинаковые позиции.
Выравнивание выполняется за счет сдвига мантиссы меньшего числа вправо, мантиссы большего числа — влево. Поскольку в любом варианте теряются, выполняется сдвиг мантиссы меньшего числа вправо, что привел к утере ее младших разрядов. Сдвиги выполняются до тех пор, пока значения порядков обоих чисел не станут равны. Таким образом, если порядки слагаемых существенно отличаются, меньшее слагаемое в результате не учитывается. После того, как порядки будут выровнены, наступает этап сложения. Поскольку слагаемые могут иметь разные значения алгебраическая сумма может оказаться равной нулю.
В этом случае необходимо выполнить дополнительный сдвиг результата вправо и временно увеличить на 1 значение порядка. Но тогда возможно появление - переполнения порядка, которое расценивается как аварийная ситуация и влечет за собой прекращение операции. После сложения мантисс наступает этап нормализации результата, Нормализация представляет собой серию сдвигов кода мантиссы влево с одновременным уменьшением значения порядка до тех пор, а значение старшей цифры мантиссы не станет отличным от нуля.
Умножение и деление
При работе с числами в формате с плавающей точкой алгоритмы умножения и деления оказываются проще алгоритмов сложения и вычитания. Сначала рассмотрим алгоритм умножения (Приложение, рисунок 4). Сразу же после начала операции проверяется, не равен ли нулю один из сомножителей. Если это так, то произведение также будет равно нулю. Следующий шаг — суммирование порядков. Поскольку, как правило, для хранения порядков используется смещенное представление, при суммировании двух смещенных представлений результат будет смещен дважды. Поэтому после суммирования кодов порядков из суммы вычитается значение смещения. При суммировании может возникнуть как переполнение порядка, так и потеря значимости. В обоих случаях формируется соответствующий сигнал.
Если порядок произведения не выходит из диапазона, определенного форматом, далее перемножаются мантиссы сомножителей с учетом их знаков. Умножение мантисс выполняется по тому же алгоритму, что и умножение целых чисел в прямом коде, т.е. фактически перемножаются числа без знака, а затем произведению приписывается знак "плюс" или "минус" в зависимости от сочетания знаков сомножителей. Произведение мантисс имеет разрядность, вдвое большую, чем каждый из сомножителей. Лишние младшие разряды отбрасываются при округлении. После того как будет получено произведение мантисс, результат нормализуется и округляется. Эти операции выполняются так же, как и при сложении или вычитании. Необходимо учесть, что при нормализации может возникнуть переполнение или потеря значимости порядка.
Теперь рассмотрим алгоритм деления (Приложение, рисунок 5). Как и ранее, первый этап — анализ операндов на равенство нулю. Если нулю равно делимое, то результату сразу присваивается значение 0. Если же нулю равен делитель, то в зависимости от конкретной реализации АЛУ результату может быть присвоено значение "бесконечность" с соответствующим знаком или сформирован сигнал арифметической ошибки. Следующий этап — вычитание кода порядка делителя из кода порядка делимого. При этом получится несмещенный код разности, который нужно скорректировать — сложить с кодом смещения. После завершения операций с порядком результата проверяется, не возникло ли переполнение порядка или потеря значимости. Следующий этап — деление мантисс. За ним следуют обычные операции нормализации и округления.
Точность выполнения операций. Дополнительные разряды
Перед началом выполнения любых арифметических операций операнды загружаются в регистры АЛУ. Регистры, предназначенные для работы с мантиссами, могут иметь большую разрядность, чем поле мантиссы, предусмотренное форматом представления, плюс один неявно заданный старший разряд. Как правило, дополнительные разряды размещаются справа, т.е. имеют вес, меньший веса самого младшего разряда представления. При загрузке регистров эти разряды заполняются кодом 0. Ниже представлены примеры, которые помогут вам понять смысл использования этих дополнительных разрядов. Будем считать, что для представления чисел используется формат, регламентированный стандартом IEEE — мантисса имеет длину 24 разряда, включая неявный старший разряд слева от разделительной точки. При вычитании меньшего числа из большего мантисса меньшего числа должна быть сдвинута на один разряд вправо для того, чтобы выровнять порядки операндов.
Округление.
Результат любой операции над мантиссами операндов, как правило, формируется в регистре АЛУ, имеющем большую разрядность, чем предусмотрено форматом хранения. Поэтому при сохранении результата необходимо тем или иным способом выполнить его округление. Стандартом IEEE предусматривается четыре альтернативных подхода к выполнению округления:
• округление до ближайшего числа, которое можно представить в используемом формате;
• округление до +;
• округление до -;
• округление до нуля.
Рассмотрим эти способы более детально. Способ округления до ближайшего числа определяется в стандарте следующим образом. При сохранении результата, имеющего теоретически бесконечную точность, необходимо взять ближайшее к результату число, которое можно представить в используемом формате хранения. Если существуют два числа, одинаково близких к результату, выбирается то из них, у которого младший разряд равен 0. Лучший результат дает метод несмещенной ошибки. Один из вариантов несмещенного округления — после выполнения операции, результат которой соответствует этому особому случаю, случайным образом выбирать округление до большего или до меньшего. Тогда в среднем результат всей процедуры будет несмещенным. Аргумент против этого подхода состоит в том, что он не дает возможности получить повторяющиеся результаты вычислений одной и той же процедуры с одними и теми же исходными данными (т.е. вычислительная процедура становится недетерминированной). Стандарт IEEE регламентирует такой подход, который заставляет сохранять в том случае четный результат:
Если результат вычислений в равной степени отличается от большего и меньшего числа, представимого в данном формате, значение округляется до большего, если младший представимый разряд до округления равен 1, и до меньшего, если этот разряд равен 0. Следующие два метода, упоминаемые в стандарте, — округление до плюс минус бесконечности — применяются при реализации методики вычисления, известной под именем "арифметика интервалов", которая предусматривает определение границ (верхней и нижней) значений результата. Последний способ, оговоренный в стандарте, предусматривает округление до. Фактически этот способ предполагает усечение результата — дополнительного разряды просто отбрасываются. При использовании этого способа хранимый. Результат по абсолютной величине будет всегда меньшим или равным точному значению, а потому при выполнении длительных вычислительных процедур образуется смещение в сторону меньших значений (к нулю). Эффект накопления и ошибки округления может быть значительно более серьезным, чем той, которую мы упоминали чуть выше, поскольку смещенная ошибка возникает при исполнении каждой операции, а не только в особых случаях.
Особенности выполнения арифметических операций в соответствии со стандартом IEEE
Стандартом IEЕЕ 754 регламентируется не только формат с плавающей точкой для представления чисел, но и определенные правила выполнения арифметических операций над ними, что позволяет получать одинаковые результаты при реализации вычислительных алгоритмов на разных аппаратных и программных платформах.
Простые и сигнализирующие значения типа NaN
Значения типа NaN представляют, по существу, не числа, а символ "втиснутые" в формат с плавающей точкой. Различается два подтипа NV значений — сигнализирующее и простое. Оба подтипа NaN-значений представляются в формате с плавающей точкой одинаково — поле порядка заполнено единицами, а в поле мантиссы присутствует код, отличный от всех нулей, который стандарт не регламентирует.
Заключение
В работе были рассмотрены алгоритмы выполнения основных арифметических операций над целыми числами, представленными в дополнительном коде. В анализе числовые и нечисловые данные обрабатываются единообразно на основе одной математической модели как числовые данные.
Для проведения подобных исследований обычно реализуется один из двух вариантов:
- изучается подмножество однородных по своей природе данных, измеряемых в одних единицах измерения;
- перед исследованием данные приводятся к сопоставимому виду, например, широко используются процентные или другие относительные величины.
Первый вариант является не решением проблемы, а лишь ее вынужденным обходом, обусловленным ограничениями реально имеющегося в распоряжении исследователей инструментария.