Числовой процессор может выполнять операции с семью разными типами данных, представленными в таблице 9, — три целых двоичных, один целый десятичный и три типа данных с плавающей запятой.
Таблица 9. Типы данных FPU
Тип данных | Бит | Количество значащих цифр | Пределы |
Целое слово | 16 | 4 | -32768 — 32767 |
Короткое целое | 32 | 9 | -2*109 — 2*109 |
Длинное целое | 64 | 18 | -9*1018 — 9*1018 |
Упакованное десятичное | 80 | 18 | -99..99 — +99..99 (18 цифр) |
Короткое вещественное | 32 | 7 | 1.18*10-38 — 3.40*1038 |
Длинное вещественное | 64 | 15—16 | 2.23*10-308 — 1.79*10308 |
Расширенное вещественное | 80 | 19 | 3.37*10-4932 — 1.18*104932 |
Вещественные числа хранятся, как и все данные, в форме двоичных чисел. Двоичная запись числа с плавающей запятой аналогична десятичной, только позиции справа от запятой соответствуют не делению на 10 в соответствующей степени, а делению на 2. Переведем для примера в двоичный вид число 0,625:
0,625 - 1/2 = 0,125
1/4 больше, чем 0,125
0,125 - 1/8 = 0
Итак, 0,625 = 0,101b. При записи вещественных чисел всегда выполняют нормализацию — умножают число на такую степень двойки, чтобы перед десятичной точкой стояла единица, в нашем случае
0,625 = 0,101b = 1,01b * 2-1
Говорят, что число имеет мантиссу 1,01 и экспоненту -1. Как можно заметить, при использовании этого алгоритма первая цифра мантиссы всегда равна 1, так что ее можно не писать, увеличивая тем самым точность представления числа дополнительно на 1 бит. Кроме того, значение экспоненты хранят не в виде целого со знаком, а в виде суммы с некоторым числом так, чтобы хранить всегда только положительное число и чтобы было легко сравнивать вещественные числа — в большинстве случаев достаточно сравнить экспоненту. Теперь мы можем рассмотреть вещественные форматы IEEE, используемые в процессорах Intel:
Кроме обычных чисел формат IEEE предусматривает несколько специальных случаев, которые могут получаться в результате математических операций и над которыми также можно выполнять некоторые операции: | ||