Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
И п л а в а ю щ е й з а п я т о й
Каждый ПК использует для представления чисел фиксированное количество двоичных разрядов. Их называют обычно разрядной сеткой ПК. Представим, что в условном ПК (например, на калькуляторе) разрядная сетка содержит 10 десятичных разрядов:
1 2 3 4 5 6 7 8 9 10 Произвольное число в общем случае имеет целую и дробную части. Следовательно, в разрядной сетке нужно установить границу между этими частями. Поставим разделяющую запятую, например, между шестым и седьмым разрядами. Тогда первые 6 разрядов сетки представляют целую часть числа, а последние 4 разряда - его дробную часть. Максимальное значение числа в этом случае равно 999999, 9999; минимальное - 0, 0001. Следовательно, при такой разрядной сетке обработка чисел может быть организована лишь в диапазоне 0, 0001.. 1000000, что явно недостаточно. Если в разрядной сетке машины запятая, разделяющая целую и дробную части числа, фиксирована в заранее определенной позиции, то получаемые в этом случае числа называют числами с фиксированной запятой.
В ПК, как правило, применяют один из двух способов представления чисел с фиксированной запятой: 1) запятая фиксирована перед старшим разрядом; в этом случае число имеет только дробную часть и не имеет целой части; 2) запятая фиксирована после младшего разряда; в этом случае число имеет только целую часть и не имеет дробной части. Наиболее часто применяется второй способ.
Числа с плавающей запятой имеют следующую форму представления: , где - мантисса; - порядок; 10 - основание системы счисления, записанное в этой же системе ( = 2; = 8; = 16). Это так называемая экспоненциальная (или показательная) форма записи числа. Например, число 358, 5 можно записать в виде 3, 585 × = 358, 5 × = 3585, 0 × = 0, 003585 × . Чтобы обеспечить единственность представления числа, по стандарту IEEE 754 на мантиссу накладывается следующее ограничение: 1 £ < 10 (в данной c/c). Следовательно, мантисса – это неправильная дробь, в которой цифра в целой части должна быть значащей, т.е. не равной нулю. Такое представление числа с плавающей запятой называется нормализованным. В рассмотренном выше примере нормализованным является первый вариант представления заданного числа. В разрядной сетке машины часть разрядов выделяется для мантиссы, а часть - для порядка числа. Предположим, что в приведенной ранее разрядной сетке для мантиссы отведено 8 разрядов, а для порядка - 2 разряда (знак числа и знак порядка временно не рассматриваются). Тогда максимальное значение мантиссы составляет 9, 9999999, что примерно равно 10. Таким образом, в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно. Максимальное значение порядка равно 99; число имеет максимальное значение 10 × , что достаточно для любых практических применений.
Сравним выполнение операции сложения для чисел с фиксированной запятой (целых чисел) и чисел с плавающей запятой. Пусть = 78535, = 416. В формате целых чисел они имеют вид = 0000078535, = 0000000416. Их сумма получается по обычному правилу сложения:
0 0 0 0 0 7 8 5 3 5 + 0 0 0 0 0 0 0 4 1 6 ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ 0 0 0 0 0 7 8 9 5 1
В формате с плавающей запятой заданные числа имеют вид = 7, 8535 × , = 4, 16 × , или в машинном представлении = 7853500004, = 4160000002.
Непосредственно складывать мантиссы, если слагаемые имеют разные порядки, нельзя. В этом случае сложение должно выполняться в следующей последовательности: 1) Определяется разница порядков слагаемых ; здесь имеем = 2. 2) Если D > 0, то сдвигается вправо на D разрядов; если D < 0, сдвигу подвергается ; при D = 0 сдвиг не производится. В данном примере после сдвига получим: = 7, 8535000; = 0, 0416000 3) Выполняется сложение мантисс = 7, 8951000 4) Результату приписывается максимальный из порядков слагаемых = max() = 4 В результате получаем = 7895100004 При сложении мантисс может иметь место случай > 10 (например, для = 8 × , = 7 × ). Тогда получаемый результат нужно нормализовать, т.е. суммарную мантиссу сдвинуть на один разряд вправо, а к порядку добавить 1.
Из примера видно, что способ сложения чисел с плавающей запятой более сложный по сравнению со сложением целых чисел. Следовательно, для выполнения арифметических операций над числами с плавающей запятой требуется больше машинного времени процессора, чем для выполнения таких же операций по отношению к целым числам. В связи с этим практически в любом ПК числа представлены как в формате с фиксированной запятой, так и в формате с плавающей запятой. При программировании рекомендуется применять в первую очередь целые числа, если это возможно по условиям задачи. Обычно целочисленные переменные в программе определяют объекты, которые могут принимать только целые значения (количество предметов, порядковый номер предмета и т.п.). Числа с плавающей запятой отображают вещественные числа, которые в технических задачах определяют, как правило, результаты измерения каких-либо параметров (длина, вес, площадь, время и т.п.).
В заключение рассмотрим вопрос о происхождении названия " число с плавающей запятой".
Пусть в разрядной сетке условной машины содержится число |¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ u ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ®|¾ p ¾ ®| т.е. число = 5, 86591 × = 58, 6591. Если рассматривать его как число с фиксированной запятой, то разделяющая запятая должна быть поставлена после второго разряда ( = 1).
Для числа запятая будет установлена после третьего разряда ( = 586, 591; = 2).
Для числа запятая устанавливается после четвертого разряда ( = 5865, 91) и т.д.
При этом создается впечатление, что запятая " плавает" по разрядной сетке при изменении порядка числа.
|