Существует три формата чисел с плавающей точкой, поддерживаемых сопроцессором 8087. Эти форматы показаны на Фиг. 7.1 и 7.2. На Фиг. 7.1 показана логическая структура чисел, а на Фиг. 7.2 показано расположение отдельных частей числа, когда оно записывается в память.
Временное действительное число является наиболее точным и имеет большой диапазон. Оно представляется 80 битами или 10 байтами. Его мантисса имеет длину 64 бита, это дает точность, эквивалентную примерно 19 десятичным цифрам. Мантисса в общем случае нормализована, но в некоторых случаях может оказаться денормализованной. По этой причине временный действительный формат уже не подразумевает, что старший бит мантиссы равен 1. На Фиг. 7.2 старшая нормализованная единица показана явно частью мантиссы, а не чем-то подразумеваемым. Пятнадцатибитовое поле порядка смещается значением 16383, или 03FFFH. Такой порядок допускает диапазон изменения чисел от 2**-16383 до 2**16383, или примерно от 10**-4932 до 10**4932. Поскольку сопроцессор 8087 может денормализовать мантиссу временного действительного числа, нижняя граница его расширяется еще дальше. Так как число денормализовано, в мантиссе есть незначащие нули, и это позволяет изобразить даже меньшее число, чем допускает диапазон значений порядка. Например, давайте снова рассмотрим простую форму числа с плавающей точкой, содержащую 3-битовое поле порядка и 4-битовую матиссу. Наименьшее положительное число, которое здесь может быть представлено, есть
1.000*10000B=1*2**-3=1/8
В этом примере подразумевается: что значение порядка смещено на значение 3. Если теперь мы денормализуем мантиссу, то сможем представить даже меньшее число, например
0.100*10000B=1/2*2**-3=1/16
а наименьшее положительное число, которое можно представить денормализацией мантиссы есть
0.001*10000B=1/8*2**-3=1/64
Денормализация мантиссы расширяет нижнюю границу диапазона чисел.
Этот дополнительный диапазон дается не даром. Поскольку мы ввели незначащие нули, точность мантиссы уменьшилась. Временный действительный формат числа дает возможность пожертвовать точностью ради расширения диапазона числа, когда это необходимо. Такая возможность требуется в первую очередь на промежуточных шагах длительных вычислений. Иногда прикладная программа вычитает два примерно одинаковых числа перед выполнением другой операции, и результат много меньше, чем любое из исходных чисел. Эта разность может оказаться очень важной. В таких специальных случаях вычисления можно продолжать, допуская расширение диапазона представления числа. Единственной альтернативой здесь была бы установка нулевого результата вычитания, а в этом случае всякая значимость теряется.