Действительные или вещественные числа часто используются в математических вычислениях и представляются конечными или бесконечными дробями, т.е. точность представления чисел не ограничена. Однако в компьютерах числа хранятся в регистрах и ячейках памяти, которые представляют собой последовательность байтов с ограниченным количеством разрядов. Следовательно, бесконечные или очень длинные числа усекаются до некоторой длины и в компьютерном представлении выступают как приближенные.
Любое вещественное число можно записать в нормальной (научной, экспоненциальной) форме:
, (2.5.)
где – м антисса числа;
– основание системы счисления;
– порядок.
Порядок указывает, на какое количество позиций и в каком направлении должна сместиться в мантиссе точка (запятая), отделяющая дробную часть от целой.
С целью минимизации погрешности в вычислениях и эффективного использования памяти, а также в соответствии со стандартом IEEE-754[1], если мантисса находится в диапазоне , то число считается нормализованным. Именно такое представление числа с плавающей запятой и используется в компьютере. Это экономит один бит, так как неявная единица в памяти не хранится.
Замечание. Из нормализованного представления следует, что дробная часть мантиссы должна удовлетворять условию: .
Теперь можно сказать, что нормализованное число имеет следующий вид:
(2.6.)
Рассмотрим примеры представления любого числа в форме плавающей запятой:
1) 12,345(10) = 0,0012345(10) * 104 = 0,12345(10) * 102 = 1234, 5(10) * 10-2
2) 101110,11101(2) = 0,10111011101(2)*106 = 0,010111011101(2)*107
3) 1,011(2) = 10,11(2)*10-1
Из приведенных примеров можно сделать следующие выводы:
· порядок числа определяет, на сколько разрядов необходимо осуществить сдвиг относительно запятой;
· представление чисел в форме с плавающей запятой неоднозначно.
Стандарт IEEE-754 определяет четыре основных «двоичных» формата чисел с плавающей запятой (Таблица 2.5).
Таблица 2.5.
Формат | Точность | Число бит | Порядок | Смещение порядка | Мантисса | Число знаков после запятой |
binary 16 | half | |||||
binary 32 | single | |||||
binary 64 | double | |||||
binary 128 | quadruple |
Наиболее часто используемые форматы вещественных чисел являются: с одинарной точностью (single-precision, 32 бита); с двойной точностью (double-precision, 64 бита).
Как нормализованное число, записанное в форме с плавающей запятой, записывается в память, представлено на схемах для 32-х разрядных (Рисунок 2.2) и 64-х разрядных чисел (Рисунок 2.3).
Рисунок 2.2.
Рисунок 2.3.
Первое поле, занимающее один бит с номером 31 (63), отвечает за знак числа. Второе, занимающее биты с 23-го по 30-й (с 52-го по 62-й), относится к порядку числа (или экспоненте). В стандарте IEEE-754 указано, что в этом поле сохраняется смещенный порядок. Смещенный порядок (M(n)) или смещенная экспонента, указанный на схемах связаны с обычным порядком (p) числа соотношением
, (2.7.)
где означает «смещение» и выбирается для разных форматов чисел таким образом, чтобы значение выражения (2.7.) всегда было положительно. Такой подход вызван тем обстоятельством, что знак порядка, который может быть как положительным, так и отрицательным, в компьютерном представлении числа не хранится Значение смещения для чисел различны разной разрядности указаны в Таблице 2.5. Последнее поле, занимающее 23 (52) бита от 0-го до 22-го (от 0-го до 51-го) хранит мантиссу, точнее, её дробную часть, потому как бит целой части не хранится.
Пример: Запишем внутреннее представление числа в форме с плавающей точкой в формате 32 бит.
1. Переведем его в двоичную систему счисления с 24 значащими цифрами.
2. Запишем в форме нормализованного двоичного числа с плавающей точкой:
3. Здесь мантисса, основание системы счисления (2(10)=10(2)) и порядок (4(10)=100(2))записаны в двоичной системе.
4. Вычислим машинный порядок.
5. Таким образом, в двоичном коде с плавающей запятой число примет вид:
или
Для того, чтобы получить внутреннее представление отрицательного числа , достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.
Теперь переведем полученное число обратно в десятичный формат.
По виду конечного результата очевидна погрешность () в представлении двоичных чисел с плавающей запятой. В этом состоит главная особенность обработки вещественных чисел в компьютере - она всегда ведется с погрешностью [Стариченко].
[1] стандарт IEEE (Institute of Electrical and Electronics Engineers), описывающий формат представления чисел с плавающей точкой