Как представить числа в виде. Формат представления чисел с плавающей запятой. Примеры нормализованного представления
Если бы мы могли заглянуть в содержание компьютерной памяти, то мы бы увидели следующее:
Данный рисунок отражает Правило №1: Данные (и программы) в памяти компьютера хранятся в двоичном виде, т.е. в виде цепочек ноликов и единичек.
Правило №2: представление данных в компьютере дискретно.
Что такое дискретность?
Самый близкий ответ: «Отдельный»
Примечание: Дискретное множество состоит из отделенных друг от друга элементов. Например, песок дискретен, поскольку он состоит из отдельных песчинок. А вода или масло непрерывны (в рамках наших ощущений, поскольку отдельные молекулы мы все равно ощутить не можем)
Например, изображение строится в виде совокупности точек, т.е. дискретно.
Правило №3: множество представимых в памяти величин ограничено и конечно.
Представление чисел в компьютере.
Целые числа в компьютере. (Формат с фиксированной запятой)
Любое вычислительное устройство (компьютер, калькулятор) может работать только с ограниченным множеством целых чисел. Посмотрите на табло калькулятора, на нем помещается 10 знаков. Самое большое положительное число, которое помещается на табло:
9 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
Самое большое по абсолютной величине отрицательное число:
9 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
Аналогично дело обстоит и в компьютере.
Например, если под целое число выделяется ячейка памяти размером в 16 битов, то самое большое положительное число будет таким:
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
В десятичной системе счисления оно равно:
2 15 -1=32767
Здесь первый бит играет роль знака числа. Ноль - признак положительного числа. Самое большое по модулю отрицательное число равно -32768.
Как получить его внутреннее представление:
1)
перевести число в 32768 в двоичную систему счисления,
он равно
1000000000000000 - получили прямой
код.
2) инвертировать этот двойчный код, т.е. заменить нули на единицы, а единицы на нули - получили обратный код .
0111111111111111
3) Прибавить единицу к этому двоичному числу, в результате получим:
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Единица в первом бите обозначает знак «минус».
(не нужно думать, что полученный код - это «минус ноль». Этот код представляет число -32768.)
Таковы правила машинного представления целых чисел. Данное внутреннее представление числа называется дополнительным кодом .
Если под целое число в памяти компьютера отводится N бит, то диапазон значений целых чисел: [-2 N-1 -1, 2 N -1]
Мы рассмотрели формат представления целых чисел со знаком, т.е. положительных и отрицательных. Бывает, что нужно работать только с положительными целыми числами. В таком случае используется формат представления целых чисел без знака.
В этом формате самое маленькое число - ноль, а самое большое число для 16-разрядной ячейки:
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
В десятичной системе счисления это 2 16 - 1 = 65535, в два раза больше по модулю, чем в представлении со знаком.
Целые числа в компьютере. (Формат с плавающей запятой)
Самое большое число у разных калькуляторов может оказаться разным. У самого простого калькулятора - 999999999. Если прибавить к нему еще единицу, то калькулятор выдаст сообщение об ошибке. А на более «умном» калькуляторе прибавление единицы приведет к такому результату:
1 |
е |
+ |
0 |
9 |
Данную запись на табло понимают так: 1 x10 9 .
Такой формат записи числа называется форматом с плавающей запятой .
1 |
е |
+ |
0 |
9 |
мантисса |
порядок числа |
В компьютере числа могу и представляться как в формате с фиксированной запятой так и в формате с плавающей запятой.
Вещественными числами (в отличие от целых) в компьютерной технике называются числа, имеющие дробную часть.
При их написании вместо запятой принято писать точку . Так, например, число 5 - целое, а числа 5.1 и 5.0 - вещественные.
Для удобства отображения чисел, принимающих значения из достаточно широкого диапазона (то есть, как очень маленьких, так и очень больших), используется форма записи чисел с порядком основания системы счисления . Например, десятичное число 1.25 можно в этой форме представить так:
1.25*10 0 = 0.125*10 1 = 0.0125*10 2 = ... ,
или так:
12.5*10 -1 = 125.0*10 -2 = 1250.0*10 -3 = ... .
Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, то есть максимальная точность представления числа в машине. Из этого следует:
Такое, наиболее выгодное для компьютера, представление вещественных чисел называется нормализованным .
Мантиссу и порядок q-ичного числа принято записывать в системе с основанием q, а само основание - в десятичной системе.
Примеры нормализованного представления:
Десятичная система Двоичная система
753.15 = 0.75315*10 3 ; -101.01 = -0.10101*2 11 (порядок 11 2 = 3 10)
0.000034 = -0.34*10 -4 ; -0.000011 = 0.11*2 -100 (порядок -100 2 = -410)
Вещественные числа в компьютерах различных типов записываются по-разному. При этом компьютер обычно предоставляет программисту возможность выбора из нескольких числовых форматов наиболее подходящего для конкретной задачи - с использованием четырех, шести, восьми или десяти байтов.
В качестве примера приведем характеристики форматов вещественных чисел, используемых IBM-совместимыми персональными компьютерами:
Форматы вещественных чисел | Размер в байтах | Примерный диапазон абсолютных значений | Количество значащих десятичных цифр |
Одинарный | 4 | 10 -45 ... 10 38 | 7 или 8 |
Вещественный | 6 | 10 -39 ... 10 38 | 11 или 12 |
Двойной | 8 | 10 -324 ... 10 308 | 15 или 16 |
Расширенный | 10 | 10 -4932 ... 10 4932 | 19 или 20 |
Из этой таблицы видно, что форма представления чисел с плавающей точкой позволяет записывать числа с высокой точностью и из весьма широкого диапазона .
При хранении числа с плавающей точкой отводятся разряды для мантиссы, порядка, знака числа и знака порядка:
Покажем на примерах, как записываются некоторые числа в нормализованном виде в четырехбайтовом формате с семью разрядами для записи порядка.
1. Число 6.25 10 = 110.01 2 = 0,11001
- 2 11:
2. Число -0.125 10 = -0.0012 = -0.1*2 -10 (отрицательный порядок записан в дополнительном коде):
Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы. Для n-разрядного представления оно будет равно
целых неотрицательных чисел . Минимальное число соответствует восьми нулям, хранящимся в восьми битах ячейки памяти, и равно нулю. Максимальное число соответствует восьми единицам и равно
А = 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 1 × 2 8 - 1 = 255 10 .
Диапазон изменения целых неотрицательных чисел чисел: от 0 до 255.
Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов), причем старший (левый) разряд отводится под знак числа (если число положительное, то в знаковый разряд записывается 0, если число отрицательное - 1).
Представление в компьютере положительных чисел с использованием формата "знак-величина" называется прямым кодом числа. Например, число 2002 10 = 11111010010 2 будет представлено в 16-разрядном представлении следующим образом:
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
Максимальное положительное число (с учетом выделения одного разряда на знак) для целых чисел со знаком в n-разрядном представлении равно:
Для представления отрицательных чисел используется дополнительный код . Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие.
Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2 n - |A|.
Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, так как в n-разрядной компьютерной арифметике:
2 n - |А| + |А| = 0,
поскольку в компьютерной n-разрядной арифметике 2 n = 0. Действительно, двоичная запись такого числа состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, то есть n нулей.
Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:
1. Модуль числа записать в прямом коде в n двоичных разрядах.
2. Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
3. К полученному обратному коду прибавить единицу.
Запишем дополнительный код отрицательного числа -2002 для 16-разрядного компьютерного представления:
При n-разрядном представлении отрицательного числа А в дополнительным коде старший разряд выделяется для хранения знака числа (единицы). В остальных разрядах записывается положительное число
Чтобы число было положительным, должно выполняться условие
|А| £ 2 n-1 .
Следовательно, максимальное значение модуля числа А в га-разрядном представлении равно:
Тогда минимальное отрицательное число равно:
Определим диапазон чисел, которые могут храниться в оперативной памяти в формате длинных целых чисел со знаком (для хранения таких чисел отводится четыре ячейки памяти - 32 бита).
Максимальное положительное целое число (с учетом выделения одного разряда на знак) равно:
А = 2 31 - 1 = 2 147 483 647 10 .
Минимальное отрицательное целое число равно:
А = -2 31 = - 2 147 483 648 10 .
Достоинствами представления чисел в формате с фиксированной запятой являются простота и наглядность представления чисел, а также простота алгоритмов реализации арифметических операций.
Недостатком представления чисел в формате с фиксированной запятой является небольшой диапазон представления величин, недостаточный для решения математических, физических, экономических и других задач, в которых используются как очень малые, так и очень большие числа.
Представление чисел в формате с плавающей запятой. Вещественные числа хранятся и обрабатываются в компьютере в формате с плавающей запятой . В этом случае положение запятой в записи числа может изменяться.
Формат чисел с плавающей запятой базируется на экспоненциальной форме записи, в которой может быть представлено любое число. Так число А может быть представлено в виде:
A = m × q n | 2.3 |
где m - мантисса числа;
q - основание системы счисления;
n - порядок числа.
Для единообразия представления чисел с плавающей запятой используется нормализованная форма, при которой мантисса отвечает условию:
1/n £ |m|
Это означает, что мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля.
Преобразуем десятичное число 555,55, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой:
555,55 = 0,55555 × 10 3 .
Здесь нормализованная мантисса: m = 0,55555, порядок: n = 3.
Число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности ) или 8 байтов (число двойной точности ). При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа, а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.
Определим максимальное число и его точность для формата чисел обычной точности , если для хранения порядка и его знака отводится 8 разрядов, а для хранения мантиссы и ее знака - 24 разряда:
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
знак и порядок | знак и мантисса |
Максимальное значение порядка числа составит 1111111 2 = 127 10 , и, следовательно, максимальное значение числа составит:
2 127 = 1,7014118346046923173168730371588 × 10 38 .
Максимальное значение положительной мантиссы равно:
2 23 - 1 » 2 23 = 2 (10 × 2,3) » 1000 2,3 = 10 (3 × 2,3) » 10 7 .
Таким образом максимальное значение чисел обычной точности с учетом возможной точности вычислений составит 1,701411 × 10 38 (количество значащих цифр десятичного числа в данном случае ограничено 7 разрядами).
Задания
1.26. Заполнить таблицу, записав отрицательные десятичные числа в прямом, обратном и дополнительном кодах в 16-разрядном представлении:
1.27. Определить диапазон представления целых чисел со знаком (отводится 2 байта памяти) в формате с фиксированной запятой.
1.28. Определить максимальное число и его точность для формата чисел двойной точности , если для хранения порядка и его знака отводится 11 разрядов, а для хранения мантиссы и ее знака - 53 разряда.
Числовые данные обрабатываются в компьютере в двоичной системе счисления. Числа хранятся в памяти компьютера в двоичном коде, т. е. в виде последовательности нулей и единиц, и могут быть представлены в формате с фиксированной или плавающей запятой.
Целые числа хранятся в памяти в формате с фиксированной запятой. При таком формате представления чисел для хранения целых неотрицательных чисел отводится регистр памяти, состоящий из восьми ячеек памяти (8 бит). Каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда и вне разрядной сетки. Например, число 110011012 будет храниться в регистре памяти следующим образом:
Таблица 4
Максимальное значение целого неотрицательного числа, которое может храниться в регистре в формате с фиксированной запятой, можно определить из формулы: 2n – 1, где n – число разрядов числа. Максимальное число при этом будет равно 28 – 1 = 25510 = 111111112и минимальное 010 = 000000002. Таким образом, диапазон изменения целых неотрицательных чисел будет находиться в пределах от 0 до 25510.
В отличие от десятичной системы в двоичной системе счисления при компьютерном представлении двоичного числа отсутствуют символы, обозначающие знак числа: положительный (+) или отрицательный (-), поэтому для представления целых чисел со знаком в двоичной системе используются два формата представления числа: формат значения числа со знаком и формат дополнительного кода. В первом случае для хранения целых чисел со знаком отводится два регистра памяти (16 бит), причем старший разряд (крайний слева) используется под знак числа: если число положительное, то в знаковый разряд записывается 0, если число отрицательное, то – 1. Например, число 53610 = 00000010000110002 будет представлено в регистрах памяти в следующем виде:
Таблица 5
а отрицательное число -53610 = 10000010000110002 в виде:
Таблица 6
Максимальное положительное число или минимальное отрицательное в формате значения числа со знаком (с учетом представления одного разряда под знак) равно 2n-1 – 1 = 216-1 – 1 = 215 – 1 = 3276710 = 1111111111111112 и диапазон чисел будет находиться в пределах от -3276710 до 32767.
Наиболее часто для представления целых чисел со знаком в двоичной системе применяется формат дополнительного кода, который позволяет заменить арифметическую операцию вычитания в компьютере операцией сложения, что существенно упрощает структуру микропроцессора и увеличивает его быстродействие.
Для представления целых отрицательных чисел в таком формате используется дополнительный код, который представляет собой дополнение модуля отрицательного числа до нуля. Перевод целого отрицательного числа в дополнительный код осуществляется с помощью следующих операций:
1) модуль числа записать прямым кодом в n (n = 16) двоичных разрядах;
2) получить обратный код числа (инвертировать все разряды числа, т. е. все единицы заменить на нули, а нули – на единицы);
3) к полученному обратному коду прибавить единицу к младшему разряду.
Например, для числа -53610 в таком формате модуль будет равен 00000010000110002, обратный код – 1111110111100111, а дополнительный код – 1111110111101000.
Необходимо помнить, что дополнительный код положительного числа – само число.
Для хранения целых чисел со знаком помимо 16-разрядного компьютерного представления, когда используются два регистра памяти (такой формат числа называется также форматом коротких целых чисел со знаком), применяются форматы средних и длинных целых чисел со знаком. Для представления чисел в формате средних чисел используется четыре регистра (4 х 8 = 32 бит), а для представления чисел в формате длинных чисел – восемь регистров (8 х 8 = 64 бита). Диапазоны значений для формата средних и длинных чисел будут соответственно равны: -(231 – 1) … + 231 – 1 и -(263-1) … + 263 – 1.
Компьютерное представление чисел в формате с фиксированной запятой имеет свои преимущества и недостатки. К преимуществам относятся простота представления чисел и алгоритмов реализации арифметических операций, к недостаткам – конечный диапазон представления чисел, который может быть недостаточным для решения многих задач практического характера (математических, экономических, физических и т. д.).
Вещественные числа (конечные и бесконечные десятичные дроби) обрабатываются и хранятся в компьютере в формате с плавающей запятой. При таком формате представления числа положение запятой в записи может изменяться. Любое вещественное число К в формате с плавающей запятой может быть представлено в виде:
где А – мантисса числа; h – основание системы счисления; p – порядок числа.
Выражение (2.7) для десятичной системы счисления примет вид:
для двоичной -
для восьмеричной -
для шестнадцатеричной -
Такая форма представления числа также называется нормальной . С изменением порядка запятая в числе смещается, т. е. как бы плавает влево или вправо. Поэтому нормальную форму представления чисел называют формой с плавающей запятой . Десятичное число 15,5, например, в формате с плавающей запятой может быть представлено в виде: 0,155 · 102; 1,55 · 101; 15,5 · 100; 155,0 · 10-1; 1550,0 · 10-2 и т. д. Эта форма записи десятичного числа 15,5 с плавающей запятой не используется при написании компьютерных программ и вводе их в компьютер (устройства ввода компьютеров воспринимают только линейную запись данных). Исходя из этого выражение (2.7) для представления десятичных чисел и ввода их в компьютер преобразовывают к виду
где Р – порядок числа,
т. е. вместо основания системы счисления 10 пишут букву Е, вместо запятой – точку, и знак умножения не ставится. Таким образом, число 15,5 в формате с плавающей запятой и линейной записи (компьютерное представление) будет записано в виде: 0.155Е2; 1.55Е1; 15.5Е0; 155.0Е-1; 1550.0Е-2 и т.д.
Независимо от системы счисления любое число в форме с плавающей запятой может быть представлено бесконечным множеством чисел. Такая форма записи называется ненормализованной . Для однозначного представления чисел с плавающей запятой используют нормализованную форму записи числа, при которой мантисса числа должна отвечать условию
где |А| - абсолютное значение мантиссы числа.
Условие (2.9) означает, что мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля, или, другими словами, если после запятой в мантиссе стоит не нуль, то число называется нормализованным. Так, число 15,5 в нормализованном виде (нормализованная мантисса) в форме с плавающей запятой будет выглядеть следующим образом: 0,155 · 102, т. е. нормализованная мантисса будет A = 0,155 и порядок Р = 2, или в компьютерном представлении числа 0.155Е2.
Числа в форме с плавающей запятой имеют фиксированный формат и занимают в памяти компьютера четыре (32 бит) или восемь байт (64 бит). Если число занимает в памяти компьютера 32 разряда, то это число обычной точности, если 64 разряда, то это число двойной точности. При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, мантиссы и порядка. Количество разрядов, которое отводится под порядок числа, определяет диапазон изменения чисел, а количество разрядов, отведенных для хранения мантиссы, – точность, с которой задается число.
При выполнении арифметических операций (сложение и вычитание) над числами, представленными в формате с плавающей запятой, реализуется следующий порядок действий (алгоритм) :
1) производится выравнивание порядков чисел, над которыми совершаются арифметические операции (порядок меньшего по модулю числа увеличивается до величины порядка большего по модулю числа, мантисса при этом уменьшается в такое же количество раз);
2) выполняются арифметические операции над мантиссами чисел;
3) производится нормализация полученного результата.
Практическая часть
Вещественные числа в математических вычислениях не имеют ограничений на диапазон и точность представления чисел. Однако в компьютерах числа хранятся в регистрах и ячейках памяти с ограниченным количеством разрядов. Поэтому точность представления вещественных чисел, представимых в машине, является конечной, а диапазон ограничен.
При написании вещественных чисел в программах вместо привычной запятой принято ставить точку. Любое вещественное число можно представить в форме записи чисел с порядком основания системы счисления.
Пример 4.4. Десятичное число 1.756 в форме записи чисел с порядком основания системы счисления можно представить так:
1.756 . 10 0 = 0.1756 . 10 1 = 0.01756 . 10 2 = ...
17.56 . 10 -1 = 175.6 . 10 -2 = 1756.0 . 10 -3 = ... .
Представлением числа с плавающей точкой называется представление числа N в системе счисления с основанием q в виде:
N = m* . q p ,
где m - множитель, содержащий все цифры числа (мантисса), p - целое число, называемое порядком.
Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, то есть максимальная точность представления числа в машине.
Если в мантиссе первая цифра после точки (запятой) отлична от нуля, то такое число называется нормализованным .
Мантиссу и порядок q -ичного числа принято записывать в системе с основанием q , а само основание - в десятичной системе.
Пример 4.5. Приведем примеры нормализованного представления числа в десятичной системе:
2178.01 =0.217801 * 10 4
0.0045 =0.45 * 10 -2
Примеры в двоичной системе:
10110.01= 0.1011001 * 2 101 (порядок 101 2 =5 10)
Современными компьютерами поддерживаются несколько международных стандартных форматов хранения вещественных чисел с плавающей точкой, различающихся по точности, но все они имеют одинаковую структуру. Вещественное число хранится в трех частях: знак мантиссы, смещенный порядок и мантисса:
Смещенный порядок n -разрядного нормализованного числа вычисляется следующим образом: если для задания порядка выделено k разрядов, то к истинному значению порядка, представленного в дополнительном коде, прибавляют смещение, равное (2 k -1 -1).
Таким образом, порядок, принимающий значения в диапазоне от -128 до +127, преобразуется в смещенный порядок в диапазоне от 0 до 255. Смещенный порядок хранится в виде беззнакового числа, что упрощает операции сравнения, сложения и вычитания порядков, а также упрощает операцию сравнения самих нормализованных чисел.
Количество разрядов, отводимых под порядок, влияет на диапазон от наименьшего отличного от нуля числа до наибольшего числа, представимого в машине при заданном формате. Очевидно, что чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа. В связи с тем, что у нормализованных вещественных чисел старший бит мантиссы всегда равен 1, этот старший бит не хранится в памяти.
Любое двоичное целое число, содержащее не более m разрядов, может быть без искажений преобразовано в вещественный формат.
Таблица 4.3. Стандартные форматы представления вещественных чисел
Пример 4.6. Представление нормализованных чисел в одинарном формате.
Проиллюстрируем, как будет храниться число 37,16 10 . При переводе в двоичное число не получается точного перевода 100101,(00101000111101011100) - дробная часть, заключенная в скобках, повторяется в периоде.
Переводим число в нормализованный вид: 0,100101(00101000111101011100) * 2 110
Представим вещественное число в 32-разрядном формате:
1. Знак числа «+», поэтому в знаковый разряд (31) заносим 0;
2. Для задания порядка выделено 8 разрядов, к истинному значению порядка, представленного в дополнительном коде, прибавляем смещение (2 7 -1)=127. Так как порядок положительный, то прямой код порядка совпадает с дополнительным, вычислим смещенный порядок: 00000110 + 01111111=10000101
Заносим полученный смещенный порядок.
3. Заносим мантиссу, при этом старший разряд мантиссы убираем (он всегда равен 1);
смещенный порядок |
мантисса |
В данном примере мы смогли перенести только 24 разряда, остальные были утеряны с потерей точности представления числа.