УРОК 4. Представление чисел с плавающей точкой
На
практике часто используются не только целые числа, но часто
вещественные с не нулевой дробной частью. Для этих чисел существует
свое представление. Почему бы не использовать вещественные числа и для
хранения целых чисел? Дело в том, что операции с целыми числами
проводит Центральный процессор, а операции с вещественными числами -
специальный сопроцессор для операций с числами с плавающей запятой.
Данный процессор требует намного больше времени по сравнению с
выполнением операций с целыми числами, так как необходимо загрузиться в
специальные регистры этого процессора, выполнить операции, которые
могут производиться в десятки раз дольше, особенно при операциях
умножения или деления. В тоже время операции с целыми числами могут
требовать больший объем вычислений, например, при операциях с
пикселами, с индексными переменными, счетчиками и прочими видами.
Поэтому при программировании отдельно определяются целые и вещественные
переменные.
Существует
несколько видов вещественных переменных, из которых наиболее часто
используется два представления: с простой точностью и с двойной.
Рассмотрим их подробней.
Прежде всего введем понятие нормализации.
Для того, чтобы представить число, нужно его нормализовать, то есть
представить как некоторое число, большее 1 и меньшее 2 в двоичном
представлении. Например, 101b = 1,01bх22, а 0,00101b = 1,01bх2-3. В памяти машины хранится (для числа 1,01bх2-3)
сначала знак числа (плюс), затем знак показателя (минус), показатель
степени (3) и значащие цифры (101b). Значащие цифры при этом
дополняются справа нулями, причем количество цифр определяется
количеством разрядов, выделенных для числа.
Попробуем представить число 1101b. Прежде всего нормализуем его, получим 1,101bх2-4.
Затем запишем его составные части: 1. знак числа (+), 2. знак порядка
(-), 3. значение порядка (4), 4. значение дробной части (101). Для
знаков числа и порядка используется по одному биту, для значений
порядка и дробной части числа применяется количество бит, которое
зависит от вида числа.
Короткое
вещественное число имеет восемь бит для определения порядка, 23 бита -
для значащих цифр (плюс один бит на знак числа), всего 32 бита. Двойное
вещественное число содержит восемь бит для порядка и 63 бита для
значащих цифр, один бит на знак числа, всего 64 бита. Существуют и
другие форматы: расширенный, действительный, длинное и другие вещественные числа, разница между которыми заключается в количестве выделенных для порядка и мантиссы числа позиций.
При
описании любого языка программирования дается описание диапазона
приемлемых значений вещественного числа, которое состоит из двух
диапазонов: один для порядка, другой для значащих цифр. В силу того,
что число находится в компьютере в двоичном представлении, иногда
требуется две цифры для обозначения значения, например, число одинарной
точности в языке Паскаль имеет 7-8 значащих цифр.
Короткое представление числа имеет размер 4 байта, 7-8 значащих цифр, порядок числа может быть от 10–45 до 10+38. Длинное число имеет размер 8 байт, 15-16 значащих цифр, порядок числа может быть от 10–324 до 10+308.
Если
целое число прибавить к другому целому и результат будет больше, чем
выделено для хранения, то произойдет переполнение и в результате выдано
сообщение об ошибке. То же может произойти с вещественными числами,
когда происходит сложение двух больших чисел или их умножение,
например, перемножив числа 10+37 х 10+36 = 10+73, получим значение порядка, которое превышает предельное значение для короткого вещественного числа.
Если
одно вещественное число разделить на другое и получится число с
порядком меньше, чем может быть представлено в компьютере, то
произойдет исчезновение порядка и в вещественное число поместится
нулевое значение. В этом случае на экране может быть выведено сообщение
об ошибке и программа прервет свою работу или программа продолжит свою
работу, в зависимости от установки параметров компилятора. Если к
вещественному числу прибавить другое, на много порядков меньшее, то
произойдет потеря значащих цифр, которые не войдут в число результата.
В этом случае программа также может продолжить свою работу или выдать
сообщение об ошибке в зависимости от языка программирования или
установки переключателей компилятора.
Все
вышеперечисленные случаи могут привести к ошибкам. Для того, чтобы их
избежать, обычно применяются числа двойной точности, хотя время
выполнения расчетов увеличивается.
На экране может появиться число в вещественном представлении, например, 42.012Е+02, что обозначает 4201,2. Число в этой записи имеет мантиссу (42,012) и характеристику
(Е+02). Характеристика имеет следующие части: Е- обозначает основание
десятичной системы, а «+02» - порядок числа. Окончательно число
вычисляется по формуле 42,012х 102
= 42,012х100 = 4201,2. Если число отрицательное, то перед ним ставится
знак минус, если порядок числа отрицательный, то в характеристике также
ставится знак минус. Данная запись часто применяется в таблицах, когда
имеет полный положительный или отрицательный порядок, то есть содержит
много нулей. Например, число 0,000012 проще представить как 12Е-6, а
120000 как 12Е+4, что приводит к уменьшению занимаемых числом позиций.
Если
нужно выполнить операции сложения или вычитания с вещественными
числами, записанными в десятичной системе счисления, то вначале
приведите операнды к одному порядку и выполните операцию как обычно.
Например, 22Е+11 + 32Е+10 = 220Е+10 + 32Е+10 = 252Е+10.
При
операциях умножения (деления) выполните операцию умножения (деления)
для операндов и сложите (вычтите) их порядки. Например, 12Е+2 х 5Е+3 =
60Е+5 = 6Е+6.
Задачи.
1. Нормализуйте числа: а) 1101.1b б) 0.0001b в) 10.00011 г) 11.1101b.
2. Выполните операции: а) 12Е+2 + 101Е+1 б) 15Е+2 х 8Е-1 в) 6Е+1 : 5
|