В ЭВМ используют две формы представления чисел: с фиксированной (“естественная форма”) или с плавающей (“полулогарифмическая форма”) запятой. При представлении чисел с фиксированной запятой положение запятой устанавливается для всех чисел или перед старшим, или после младшего разряда и остается неизменным, т.е. фиксируется. Для кодирования знака числа S используется старший разряд. Нуль в этом разряде соответствует плюсу, а единица – минусу. В остальных разрядах числа располагается мантисса М, сдвинутая таким образом (умноженная на коэффициент фиксации 2±P), что она будет либо целая, либо дробная для всех чисел в зависимости от положения запятой. Если запятую зафиксировать после младшего разряда, то все числа программист считает целыми, разрядная сетка имеет вид
2m
2m-1
2m-2
21
20
S
xm-1
xm-2
. . .
x1
x0
.
Часто опускают весовые коэффициенты цифр и разряды обозначают только индексами цифр, например, вида
. . .
.
Запятая в разрядной сетке никак не кодируется и только в программе путем детального ее анализа можно выяснить, что процессор работает с целыми или дробными числами.
Современные процессоры фирмы Intel ориентированы на систему арифметических команд для работы с фиксированной запятой после младшего разряда для m+1 = 8/16/32/64. Увеличение разрядности чисел с 8 до 64 бит способствует повышению точности и диапазона представления чисел новых типов ЭВМ. Пусть m+1 = 64, тогда целые числа без знака могут быть представлены от нуля до 264-1 (все единицы в разрядной сетке). С учетом знака число Х целое может лежать в диапазоне
- (263-1) £ Х £ (263-1).
Все числа ú Хú < 1 иú Хú ³ 263, а также результаты вычислений не могут быть представлены в принятой разрядной сетке и способствуют появлению особых случаев и прерываний в вычислениях. Для исключения подобных случаев осуществляют масштабирование массива чисел, т.е. умножают все числа (или часть) на соответствующий коэффициент фиксации. Например, требуется числа Х1 = - 10101,1111 и Х2 = + 101,111110 разместить в разрядной сетке 8 бит с фиксированной запятой со знаком как целые. Тогда определяют наибольшее число ú Хiú; его масштабируют (сдвигают) ´2±P таким образом, чтобы наибольшее число значащих старших цифр разместилось в разрядной сетке; младшие цифры, которые не размещаются в разрядной сетке, отбрасывают или иногда используют для округления; все другие числа умножают на полученный коэффициент фиксации и размещают в соответствующие разряды.
Так какú Х1ú >ú Х2ú, то используем Х1 для определения коэффициента фиксации Х1 = 1.1010111,´2-2. Заметим, что в Х1 за знаком располагается единица и что точка, отделяющая знак числа от мантиссы, не включается в разрядную сетку ЭВМ. Тогда число Х1 будет представлено с наибольшей точностью в виде
1101 0111,
где слева старший разряд, а справа младший. С учетом знака и коэффициента фиксации 2-2 число Х2 будет представлено как 00010111. Причем младшие цифры 11 в Х1 и 1110 в Х2 невозможно разместить в этой разрядной сетке. Они отброшены, и точность представления этих чисел уменьшается.
Если использовать масштабный коэффициент ´2+5, то числа Х1 и Х2 будут представлены в ЭВМ как дробные с фиксированной запятой перед старшим разрядом 1101 0111(Х1), 0001 0111 (Х2). Запятая в них предполагается слева после знака, старшая цифра имеет вес 2-1, младшая - 2-7.
Использование представления чисел с фиксированной запятой позволяет упростить схему ЭВМ, программы арифметических операций, которые можно выполнять с высоким быстродействием. Однако все числа представляются в разрядной сетке с разной точностью, так как масштабирование ведется с ориентацией на большие числа, а коэффициент фиксации массива чисел одинаков.
Для повышения точности и диапазона представления чисел в ЭВМ используется форма с плавающей запятой вида
Х =2PМ, 1/2 £ ú Мú < 1,
где М – нормализованная мантисса числа, 2P – характеристика числа Х, р –порядок, 2 – основание.
В этой форме порядок представлен целым числом р со знаком (Sp), мантисса – правильная дробь, т.е. представлена с фиксированной запятой перед старшим разрядом со знаком (S). Так как мантисса нормализована 1/2 £ú Мú < 1, старшая цифра мантиссы числа всегда равна 1, и любое число размещается в разрядной сетке ЭВМ с наибольшей возможной точностью.
Так число
Х1 = - 2+5 ´ 0,1010111110…0.
Тогда в разрядной сетке Х1(2) будет представлено с плавающей запятой значениями порядка и мантиссы со знаками в виде
Sp
p
S
M
0 … 0101
1 0 1 0 1 1 1 1 1 0 … 0
m
-1 -n
Для упрощения действий над порядками их сводят к микрооперациям над целыми положительными числами путем искусственного смещения значения р на величину +÷pmax÷. Смещенный порядок определяется по формуле
E = p + ÷ pmax÷.
В смещенном порядке знак отсутствует. Для представления Е необходимо столько же разрядов, как и для представления модуля порядка и знака. Так, если порядок будет занимать один байт в числе, то 7 разрядов в обычном представлении в нем отводится под модуль порядка, и pmax = 27-1. Теперь, прибавляя к любому порядку число pmax (+127), получим смещенный порядок. Например, если p = + 5, то E(10) = 5 + 127 = 132. Размещая Е(2) без знака, получим представление смещенного порядка 1000 0100 в разрядной сетке 1 байт. Смещенный порядок 0…0 соответствует наибольшему отрицательному порядку, а 1…1 - наибольшему положительному порядку. Величина E = pmax указывает на нулевой порядок. Смещенный порядок намного упрощает операции сравнения и сдвига чисел.
Если при сложении мантисс появляется цифра с весом 20, то есть мантисса вида 1, …, то считается, что произошло левое нарушение нормализации числа, когда ÷ М÷ ³ 1. А если в микрооперациях получена мантисса ú Мú < 1/2, то это соответствует правому нарушению нормализации числа, когда в старшем разряде мантиссы с весом 2-1 появляется нуль.
Учитывая, что нормализованная мантисса всегда содержит 1 в старшем разряде, часто мантиссу сдвигают на один разряд влево, увеличивая точность представления числа включением в разрядную сетку еще одного младшего разряда мантиссы. Единица с весом 2-1 сдвигается в разряд с весом 20, однако в разрядной сетке ОЗУ она не размещается и восстанавливается только в регистрах сопроцессора. Если представить число Х1 в формате с одинарной точностью (ОТ), где под порядок отводится байт, оно будет иметь вид
Рис. 3
Наибольшее отличное от нуля по модулю число, которое может быть представлено в формате ОТ, будет равно Xmax = 2+127 ´ (1 - 2-23), а наименьшее Xmin = 2-127 ´ 1/2 = 2-128. В зависимости от целей программирования в ЭВМ используются различные форматы данных.