- •Отделом стандартов Института инженеров по электротехнике и электронике
- •Национальным институтом стандартов сша
- •Дэвид Стивенсон, председатель
- •Введение
- •Содержание
- •Приложение
- •Стандарт ieee для двоичных арифметических операций с плавающей точкой
- •Определения
- •Форматы
- •Округление
- •Операции
- •Пределы десятичного преобразования
- •Пределы верного округления результата десятичного преобразования
- •Бесконечность, NaN, ноль со знаком
- •Исключительные ситуации
- •Прерывания
- •Приложение Рекомендованные Функции и Предикаты
К
Таблица 2
Формат
Десятичный в
двоичный
Двоичный
в десятичный
Мах
М
Мах
N
Мах
М
Мах
N
Одинарный
109
– 1
99
109
– 1
53
Двойной
1017
– 1
999
1017
– 1
340
Пределы десятичного преобразования
К
Таблица 3
Формат
Десятичный в
двоичный
Двоичный
в десятичный
Мах
М
Мах
N
Мах
М
Мах
N
Одинарный
109
– 1
13
109
– 1
13
Двойной
1017
– 1
27
1017
– 1
27
Пределы верного округления результата десятичного преобразования
Результаты преобразования величин, укладывающихся в пределы, указанные в табл.3, должны быть корректно округлены, как определено в раздел 4. Иначе, для округления до ближайшего, ошибка в преобразованном результате не должна превышать значение 0,47 единицы младшего значащего разряда мантиссы в формате результата; эта ошибка является результатом спецификации округления, см. раздел 4, обеспечивает защиту от переполнения или потери значимости экспоненты. В направленных режимах округления ошибка будет иметь верный знак и не должна превышать значение 1.47 единицы младшего разряда.
Преобразование должно быть монотонным, то есть, в случае увеличения значения двоичного числа с плавающей точкой, значение соответствующего конвертированного десятичного числа не должно уменьшаться. Соответственно, уменьшение значения десятичного числа не должно приводить к увеличению значения при преобразовании в двоичное число с плавающей точкой.
При округлении до ближайшего, из двоичного в десятичное и обратно в двоичное число должно быть такой длины, что и десятичная строка с максимальной точностью, определенной в таблице 2, а именно, 9 знаков для одинарного и 17 для двойного формата5.
Если при конвертировании десятичного числа в двоичное возникает переполнение/потеря значимости, выдается ответ, как определено в разделе 7. Переполнение/потеря значимости, NaN, бесконечности, обнаруженные при преобразовании двоичного в десятичное, должны сигнализировать пользователю при помощи соответствующих строк. Этот стандарт не предусматривает десятичные коды для NaN.
Чтобы избежать несовместимости, процедуры, используемые для двоично-десятичного преобразования должны выдавать одинаковые результаты, независимо от того, исполняется ли преобразование во время трансляции кода (интерпретации, компиляции, ассемблирования) или исполнения программы (происходящее во время выполнения, интерактивный ввод-вывод).
5.7 Сравнения. Должно быть возможным сравнение чисел с плавающей точкой для всех поддерживаемых форматов, даже если форматы операндов разные. Сравнения всегда точные, никогда не вызывают переполнения/потери точности. Возможны четыре взаимно исключающих отношения: меньше чем, равно, больше чем, и несравнимые (unordered). Последний вариант возможен в случае, когда один из операндов является NaN. Результатом сравнения NaN с любым значением, включая его само, является несравнимые. Сравнения должны игнорировать знак нуля (то есть +0 = -0).Результат сравнения должен выдаваться одним из двух путей, избираемым разработчиком: либо как код условия, определяющий каждое из вышеупомянутых четырех отношений, либо как ответ true/false на предикат (логическое условие), имя которого определяет запрашиваемое сравнение. В дополнение к ответу true/false к предикату, должен возникать сигнал исключительной ситуации неверная операция (7.1), когда, как показано в последней колонке таблицы 4, несравнимые операнды сравниваются с использованием утверждений > или <, но не ? (здесь символ ? означает несравнимые).
Т
Логические
функции и отношения Таблица
4
Предикат
Отношения
Исключение
неверная операция
Ad hoc
FORTRAN
Математ.
Больше
Меньше
Равно
Несравнимые
(unordered)
=
.EQ.
=
F
F
T
F
No
?<>
.NE.
T
T
F
T
No
>
.GT.
>
T
F
F
F
Yes
>=
.GE.
T
F
T
F
Yes
<
.LF.
<
F
T
F
F
Yes
<=
.LE.
F
T
T
F
Yes
?
unordered
F
F
F
T
No
<>
.LG.
T
T
F
F
Yes
<=>
.LEG.
T
T
T
F
Yes
?>
.UG.
T
F
F
T
No
?>=
.UGE.
T
F
T
T
No
?<
.UL.
F
T
F
T
No
?<=
.ULE.
F
T
T
T
No
?=
.UE.
F
F
T
T
No
NOT(>)
F
T
T
T
Yes
NOT (>=)
F
T
F
T
Yes
NOT (<)
T
F
T
T
Yes
NOT (<=)
T
F
F
T
Yes
NOT (?)
T
T
T
F
No
NOT (<>)
F
F
T
T
Yes
NOT (<=>)
F
F
F
T
Yes
NOT (?>)
F
T
T
F
No
NOT (?>=)
F
T
F
F
No
NOT (?<)
T
F
T
F
No
NOT (?<=)
T
F
F
F
No
NOT (?=)
T
T
F
F
No
именованы тремя способами: ad hoc (т.е. специально подобранный к данному случаю), FORTRAN, и математически. Отсюда видно, как они получаются из кодов четырех условий, и сказано какой предикат стал причиной исключительной ситуации неверная операции, когда отношение является несравнимым. Обозначения T и F показывают, когда соответствующий предикат true, а когда false.
Заметим, что предикаты парны, то есть каждое является логическим отрицанием другого. Применение префикса НЕ к предикату в таблице 4 обращает значения true/false для соответствующих значений, но не меняет значения последней колонки6.
Реализации, поддерживающие предикаты, должны обеспечивать первые шесть утверждений из таблицы 4, а так же седьмое, и средства логического отрицания утверждений.