
- •6. Арифметические операции над числами с плавающей точкой
- •6.1 Операции пересылки или копирования
- •6.1.1 Преобразования формата с плавающей точкой
- •6.1.2 Округление числа с плавающей точкой до целочисленного значения
- •6.1.3 Преобразования между форматами с плавающей точкой и целочисленным форматом
- •6.2 Операции сравнения
6.2 Операции сравнения
Сравниваются числа с плавающей точкой,
представленные в одинаковых или в разных
форматах. Сравнения должны игнорировать
знак нуля, т.е.
.
Результат сравнения всегда точен,
никогда не вызывает исключительные
ситуации переполнения, потери
точности и потери значимости.
Возможны четыре взаимно исключающих
отношения между операндами: меньше
чем
,
равно
,
больше чем
и несравнимые (unordered)
.
Последний вариант возможен, когда
операндом является NaN.
Результатом сравнения NaN
с любым значением, включая его самого,
является несравнимые.
Система может выполнять единственную операцию «Сравнение». В этом случае, получив операнды, система выдает результат в виде четырехразрядного двоичного кода, каждый бит которого содержит значение (true или false) одного из четырех упомянутых отношений между операндами.
Система может выполнять множество
операций сравнения, содержащих информацию
о варианте отношения, например
Таблица 6.1.
Предикаты
Отношения
Исключение
невыполнимая
операция
Ad hoc
FORTRAN
Математ.
Больше
Меньше
Равно
Несравнимые
(unordered)
=
.EQ.
=
F
F
T
F
Нет
?<>
.NE.
T
T
F
T
Нет
>
.GT.
>
T
F
F
F
Да
>=
.GE.
T
F
T
F
Да
<
.LT.
<
F
T
F
F
Да
<=
.LE.
F
T
T
F
Да
?
unordered
F
F
F
T
Нет
<>
.LG.
T
T
F
F
Да
<=>
.LEG.
T
T
T
F
Да
?>
.UG.
T
F
F
T
Нет
?>=
.UGE.
T
F
T
T
Нет
?<
.UL.
F
T
F
T
Нет
?<=
.ULE.
F
T
T
T
Нет
?=
.UE.
F
F
T
T
Нет
NOT(>)
F
T
T
T
Да
NOT (>=)
F
T
F
T
Да
NOT (<)
T
F
T
T
Да
NOT (<=)
T
F
F
T
Да
NOT (?)
T
T
T
F
Нет
NOT (<>)
F
F
T
T
Да
NOT (<=>)
F
F
F
T
Да
NOT (?>)
F
T
T
F
Нет
NOT (?>=)
F
T
F
F
Нет
NOT (?<)
T
F
T
F
Нет
NOT (?<=)
T
F
F
F
Нет
NOT (?=)
T
T
F
F
Нет
,
и выдавать значение (true
или false) результата
сравнения как ответ на вопрос
.
Стандарт IEEE 754 предусматривает 26 вариантов
таких операций, в том числе, например
(не меньше). При этой операции результат
будет true, если первый
операнд больше или равен второму операнду
или, если один или оба операнда NaN,
т.е. они несравнимые. Кроме того,
если сравниваются несравнимые
операнды, в дополнение к ответу true/false
к предикату
должен быть установлен в 1 флаг
исключительной ситуации невыполнимая
операция (раздел 5.5) и возникать сигнал
прерывание. Ситуация невыполнимая
операция складывается всегда когда
несравнимые операнды сравниваются
с использованием предикатов
или
,
но не
.
В табл.6.1 (стандарт IEEE 754) показано
при каких сочетаниях значений отношений
предикаты принимают значение true.
В колонке невыполнимая операция
указано следует или нет формировать
сигнал прерывания при в
При разработке системы конструктор может выбрать, в каком варианте должна система выполнять сравнение, – как единственную операцию сравнение или как множество операций.
При сравнении чисел следует проверять
операнды X и Y на ноль. Если оба
операнда равны нулю, то:
,
,
.
Если один из операндов равен нулю, то
.
Знак операнда не равного нулю определяет
значения отношений
и
.
Если знаки не равных нулю операндов не
совпадают, то
.
Если знак X равен 0, то:
,
;
иначе:
,
.
Если знаки неравных нулю операндов совпадают, то сравнение существенно осложняется.
Если знаки операндов (+) и один операнд нормализован, а другой не нормализован из-за малости, то: , нормализованный операнд больше ненормализованного.
Если знаки операндов (–) и один операнд нормализован, а другой не нормализован, то: ; нормализованный операнд меньше ненормализованного.
Если оба операнда нормализованы, то следует выполнить сравнение их порядков по правилу сравнения чисел в формате с фиксированной точкой (раздел 4.6).
Если порядки неравные, то . При положительных знаках операндов тот операнд больше, у которого порядок больше. При отрицательных знаках операндов тот операнд больше, у которого порядок меньше.
Если порядки равны или оба операнда ненормализованные из-за их малости, то следует сравнить дробные части мантисс по правилу сравнения чисел в формате с фиксированной точкой (раздел 4.6).
Если мантиссы равны, то:
,
,
.
При положительных знаках операндов тот
операнд больше, у которого мантисса
больше. При отрицательных знаках
операндов тот операнд больше, у которого
мантисса меньше.
При сравнении чисел в расширенных форматах стандарта IEEE 754 необходимо учитывать, что операнды могут быть ненормализованные не только из-за их малости. При этом при одинаковых знаках числа с разными порядками могут быть равными, или, например положительное число с меньшим порядком может быть больше положительного числа с большим порядком.
1 Программу обработки прерывания можно рассматривать как программное расширение системы. Это позволяет пользователю, модифицируя обработчика или создавая требуемый ему, настраивать систему на выполнение операции в том варианте, в котором она нужна при выполнении его программы.