
- •Международный стандарт представления чисел с плавающей точкой в эвм
- •Введение
- •Числа с плавающей точкой
- •Машинный эпсилон
- •Точность представления
- •Показатель степени
- •Операции и округление
- •Специальные значения
- •Бесконечность
- •Ноль со знаком
- •Ненормализованные числа
- •7.5. Числа с плавающей точкой (вещественные)
- •7.6. Диапазон представления вещественных чисел
Специальные значения
В стандарте IEEE предложено 3 вида специальных значений - NaN, ноль со знаком и бесконечность со знаком.
В таблице ниже приведены представления этих специальных значений в стандарте IEEE.
Специальные значения |
||
Показатель степени |
Дробная часть мантиссы |
Обозначение |
|
f=0 |
|
|
|
|
|
— |
|
|
f=0 |
|
|
|
|
Представим, что у нас есть программа. При работе эта программа в какой-то момент пытается извлечь корень из -4. Если бы в стандарте не было никаких резервированных значений и все битовые последовательности выражали бы соответствующие им числа, то не было бы выхода лучше, чем остановить работу программы с сообщением об ошибке.
Именно для таких случаев в стандарте IEEE существуют специальные значения.
NaN
NaN (Not a number) используется стандартом IEEE для обработки ситуаций вида извлечения корня из отрицательного числа.
Приведём небольшую таблицу, демонстрирующую случаи возвращения NaN.
Операции, возвращающие NaN |
|
Операция |
Случай, когда возникает NaN |
+ |
|
|
|
/ |
|
REM |
|
|
|
В битовом представлении NaN не оговаривается, какое значение должна принимать мантисса. Единственное ограничение — она не должна быть нулевой. Этот факт используется для передачи определённой системной информации через мантиссу. Таким образом существует много различных значений вида NaN — каждое для своего случая.
Предположим,
что мы вычисляем значение некоторого
выражения, например
.
Допустим,
принимает
значение NaN. В этом случае итоговое
значение выражения также равно NaN. Если
рассматривается некоторое длинное
выражение, в ходе вычисления которого
возникает значение NaN, то системная
информация в мантиссе должна соответствовать
тому значению NaN, которое возникло
первым. Исключением является, например,
сложение двух NaN. В этом случае мантисса
будет соответствовать одному из них,
не обязательно первому.
Приведём хороший пример, демонстрирующий важность этого специального значения. Предположим, что у нас есть программа, вычисляющая нули функции. Мы хотим реализовать её так, чтобы она не требовала интервал поиска в качестве входного аргумента. Такая реализация может вызвать проблему — что, если программа попытается вычислить значение функции вне области её определения? В частности, программа может попытаться взять квадратный корень от -4. Если бы программа выдала сообщение об ошибке и остановила свою работу она была бы для нас бесполезна. Существование NaN даёт нам возможность вернуть его в качестве результата взятия квадратного корня и продолжить работу.