Основы информатики
.pdf
Кирьянов Б.Ф. Основы информатики.
81 
Наиболее просто взаимный переход из двоичной системы и обратно можно выполнить для чисел в системах счисления с основанием 2n, где n – целое число. В этом случае, например, каждая восьмеричная цифра представляется тремя двоичными, каждая шестнадцатеричная – четырьмя двоичными и т.д. Приведѐм примеры для 16-й системы, в которой десятичные значения 10, 11, 12, 13, 14 и 15 представляются соответственно буквами A, B, C, D, E и F:
D74E,5F1B 1101 0111 0100 1110, 0101 1111 0001 1011; 110 0000, 1010 01 60,A4; 1 1110, 1100 11 1E,CC.
В устройствах ввода-вывода ЭВМ иногда используется промежуточная двоично-десятичная система представления чисел. При вводе десятичных цифр каждая из них кодируется четырьмя двоичными цифрами. Например, 49,25 0100 1001, 0010 0101. Затем для получения двоичного числа каждое число из приведѐнных четырѐх двоичных знаков умножается на соответствующую степень двойки, и полученные результаты складываются. При выводе чисел путѐм последовательного деления их на соответствующие степени двойки вначале получают двоично-десятичную форму числа, которая затем просто переводится в обычную десятичную.
Задания. 1) Перевести десятичное число 38,07 в восьмеричную и в пятеричную системы счисления.
2) Перевести шестнадцатеричное число ВE,2F в десятичную и в троичную системы счисления.
4.3.2Операции с числами в естественной форме
ВЭВМ наиболее часто используются числа типа Integer {интежер} и Real {риил}. Они представляются по разному. Числа типа real ранее представлялись
вформе с фиксированной (в естественной форме) и в форме с плавающей запятой (в форме с плавающей точкой, в полулогарифмической форме, в нормальной форме). Начиная с 21-го века в ЭВМ используется только плавающая запятая, которая позволяет расширить диапазон представления чисел. В настоящее время для этой формы представления чисел в основном используется название
нормальная форма.
Для обозначения знаков чисел в обеих формах используются старшие разряды: 0 для положительных чисел и 1 для отрицательных. Код числа в таком виде называется прямым. Особенностью операции вычитания в обеих формах является то, что ввиду неудобства выполнения заѐма из старших разрядов
Кирьянов Б.Ф. Основы информатики.
82 
уменьшаемого вычитание некоторого числа заменяется прибавлением к уменьшаемому его дополнительного или обратного кода.
При получении дополнительного кода числа знак числа изменяется на противоположный, в коде числа все разряды инвертируются и к младшему разряду добавляется единица. При получении обратного кода отличие состоит только в том, что единица к младшему разряду отрицательных чисел не прибавляется. Например:
X = - 10,0110 (- 2 6/16 ); Xпр = 1 10,0110; Xдоп = 1 01,1010; Xобр = 1 01,1001.
Обратный код используется в ЭВМ очень редко ввиду некоторого неудобства реализации циклического переноса из старшего разряда в младший при выполнении вычитания.
Прямой код используется при вводе-выводе и в операциях умножения и деления. Запись положительных чисел в приведѐнных кодах совпадает.
В большинстве случаев в ЭВМ целые и дробные числа задаются 32разрядным кодом, в котором 32-й разряд (крайний левый) является знаковым. Отрицательные числа, как уже указывалось, обычно представляются в допол-
нительном коде. В этом случае для целых чисел Xmax = 231 1 и Xmin = -231.
При выполнении вычислений с помощью ЭВМ особенность имеет место только при выполнении операций вычитания. Для того, чтобы избежать непосредственного вычитания, требующего производить неудобный для алгоритмизации заѐм из старшего разряда, вычитаемое переводится в дополнительный код и складывается. В итоге все алгебраические операции в ЭВМ сводятся только к сложению (в том числе к поразрядному, то есть по модулю 2) и к сдвигу.
Вычитание целых чисел: Z = X – Y = 0 101 – 0 011 X + Yдоп = 0 101 + 1 101. В итоге получили разность Z = 0 010 (знаковые разряды рассматривались
как знаки чисел). Ещѐ пример: Z = X – Y = 0 011 – 0 111 0 011 + 1 001 = =01 100 = Zдоп. В данном случае Zпр = 1 100 (проинвертировали знак и числовые разряды, добавили 1 к младшему разряду). То есть получили -4. Вычитание вещественных чисел выполняется аналогично.
Задание: Выполните приведѐнный пример вычитания чисел в обратном
коде.
В ряде случаев при выполнении вычислительных и других операций может произойти переполнение разрядной сетки результата операции. При этом будет получен неправильный результат. Так, при сложении положительных
Кирьянов Б.Ф. Основы информатики.
83 
чисел 0 1011 и 0 1001 (11/16 и 9/16) в дополнительном коде получим 1 0100, то есть – 12/16. Такой результат получился за счѐт перехода единицы переноса из старшего числового разряда в знаковый разряд числа, который стал отрицательным. Поэтому необходимо, чтобы программа отслеживала появление указанных переполнений при работе ЭВМ. Для этого используются следующие признаки, свидетельствующие о переполнения разрядной сетки в результате выполненной операции:
при сложении двух положительных чисел или при вычитании отрицательного числа из положительного получено отрицательное число;
при сложении двух отрицательных чисел или при вычитании положительного числа из отрицательного получено положительное число.
При появлении этих признаков ЭВМ производит нужную коррекцию (поясняется после рассмотрения действий с числами в нормальной форме). Для выявления данных признаков можно использовать модифицированные коды для представления знаков: 00 для положительных и 11 для отрицательных чисел. В этом случае признаком переполнения разрядной сетки будет появление в разрядах знаков кодов 01 или 10 (между этими разрядами перенос не выполняется). При появлении этих кодов программа восстанавливает младший разряд знака по его старшему разряду и соответственно корректирует порядок и мантиссу полученного числа.
Примеры операций сложения и вычитания целых чисел 5 и 2 с четырьмя вариантами знаков в прямом, дополнительном и обратном кодах:
Кирьянов Б.Ф. Основы информатики.
84 
Пример реализации одноразрядного сумматора:
(X и Y – слагаемые, S – сумма, Pi – перенос в i-й разряд сумматора)
Задание. Нарисовать схему 3-разрядного сумматора двух чисел.
Умножение и деление чисел с фиксированной запятой. Умножение всегда выполняется в прямом коде. Деление – можно и в дополнительном (чаще) или в обратном кодах. Знак произведения и частного находятся путѐм сложения знаков сомножителей или делимого и делителя в одноразрядном сумматоре. Варианты реализации алгоритма поясняются на рис. 4.1.
RG множимого |
|
RG множимого |
|
|
|
RG |
. . . |
. . . |
|
|
RG |
||
множителя |
|
|
|
|
|
|
множителя |
|
|
RG произведения |
|
RG произведения |
|
|
|
|
|
|
|
|
|||
Умножение выполняется, начиная |
|
Умножение выполняется, начиная со |
|||||
с младшего разряда множителя |
|
старшего разряда множителя |
|||||
Рис. 4.1. Реализация алгоритмов умножения
Кирьянов Б.Ф. Основы информатики.
85 
Пример: 1 101,011 ∙ 0 010,101 = 1 10000,110011 (-5 3/8 ∙ 2 5/8 = -16 51/64).
Умножение выполнено в прямом коде. Мантисса произведения стала шестиразрядной.
4.3.3. Алгоритмы реализации операций с числами в нормальной форме
Числа типа real могут быть представлены в форме с фиксированной и в форме с плавающей запятой (с плавающей точкой). Последнюю форму обычно называют нормальной формой. Но в настоящее время форма с фиксированной запятой практически уже не используется. Последняя форма позволяет во много раз повысить точность представления чисел. Она имеет вид: X = 2p M, где p – порядок (целое число), а М – мантисса (< 1). Причѐм в форме с плавающей запятой всегда используются нормализованные числа, значение модуля которых не менее 0,5. Это позволяет повысить точность результатов, например, при умножении, так как обычно уменьшается количество младших разрядов произведения, отбрасываемых при его округлении. При нормализации положительных чисел их мантисса сдвигается влево до первой единицы, а при нормализации отрицательных чисел мантисса сдвигается влево до первого нуля. При каждом сдвиге в младший разряд положительного числа заходит символ 0, а в младший разряд отрицательного числа – символ 1.
Примеры: 1) Пусть получено число 0 101 0 0011 = 25∙3/16, после норма-
лизации получаем: 0 011 0 1100 = 23∙12/16.
2) Нормализуется число 0 011 1 1010 = 23∙(-6/16), мантисса которого представлена в дополнительном коде. После нормализации получаем: 0 010 1 0100 = 22∙(-12/16).
Задание: Переведите число 0 11 1 0101, представленное в дополнительном коде, в прямой код. Что это за число в обычном представлении?
В некоторых современных ЭВМ для чисел типа real пока используется 6- байтовая разрядная сетка, то есть ―машинное слово‖ состоит из 48-разрядов:
48 |
47 |
46 |
. . . |
41 |
40 |
39 |
38 |
. . . |
2 |
1 |
|
|
|
|
|
|
|
|
|
|
|
ЗМ |
ЗП |
Порядок |
|
|
|
Мантисса |
|
|
||
Однако такой формат постепенно выходит из жизни. Вместо него появился но-
вый международный стандарт IEEE 754 {Institute of Electrical and Electronics
Кирьянов Б.Ф. Основы информатики.
86 
Engineers}, цель которого − обеспечить возможность использования программ, подготовленных на ЭВМ одного типа, и для ЭВМ других типов, то есть, обеспечить согласованность форматов чисел, используемых в различных ЭВМ {IEEE произносится как «ай-трипл-и»}. Очевидно, значение этой задачи трудно переоценить.
Стандарт IEEE 754 (табл. 4.1) предусматривает одинарный и двойной форматы представления чисел в нормальной форме. Однако не все кодовые комбинации в форматах IEEE интерпретируются как числа – некоторые их этих комбинаций используются для представления специальных знаков. Так, предельные значения порядка целых чисел (integer), содержащие все нули (0) и все единицы (255 – в одинарном формате и 2047 – в двойном формате), являются указанными кодовыми комбинациями, то есть для представления чисел они не используются (максимальное представимое положительное число равно 10308).
Та б л и ц а 4.1. Параметры форматов стандарта IEEE 754
|
|
|
|
|
|
|
|
Форматы чисел |
|
|
|
||
|
|
Параметр |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
Одинарный |
Одинарный |
|
Двойной |
|
Двойной рас- |
|
||||
|
|
|
|
|
|
|
|
расширенный |
|
|
|
ширенный |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ширина |
слова, |
|
|
43 |
|
64 |
|
79 |
|
|||
|
|
32 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Ширина |
порядка, |
|
8 |
|
11 |
|
11 |
|
15 |
|
||
|
|
|
|
|
|
||||||||
|
бит |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Максимальный |
|
127 |
|
1023 |
|
1023 |
|
16382 |
|
|||
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
||||||||
|
порядок |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Минимальный |
|
-126 |
|
-1022 |
|
-1022 |
|
-16382 |
|
|||
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
||||
|
порядок |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
10-38 – 10+38 |
|
10-308 – 10308 |
|
|
|
|||||||
|
Диапазон чисел |
Не определено |
|
Не определено |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
Длина |
мантиссы, |
|
23 |
|
31 |
|
52 |
|
63 |
|
||
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
||||||||
|
бит |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Кроме приведѐнных форматов, имеются ещѐ расширенные одиночный и двойной форматы.
Кирьянов Б.Ф. Основы информатики.
87 
Алгоритм сложения и вычитания чисел в нормальной форме преду-
сматривает следующие 3 этапа:
1.выравнивание порядков (увеличение меньшего порядка на величину, равную разности порядков, и сдвиг мантиссы числа с увеличенным порядком вправо на число разрядов, равное этой разности);
2.сложение или вычитание мантисс по рассмотренному правилу сложения и вычитания целых чисел;
3.нормализация полученной суммы или разности.
Пример: X = 1 110 0 1001 = 2-29/16, Y = 0 001 1 0101 = 2∙(-11/16). После выравнивания порядков находим: X = 0 001 0 0001 = 2∙1/16 = 1/8, то есть получили результат с округлением. Точное его значение равно 2∙9/128. Итак, Z = X −
− Y = = 0 001 0 0001 + 0 001 0 1011 = 0 001 0 1100 = 212/16 = 3/2. Точное зна-
чение равно 9/64 + 11/8 = 97/64.
Операция умножения. При умножении как целых, так дробных чисел знак произведения определяется как сумма по модулю 2 знаков сомножителей (сложение их одноразрядным сумматором). Причѐм отрицательные числа переводятся в прямой код. Полученное произведение снова преобразуется в дополнительный код.
Возможны 2 варианта алгоритмов получения произведения в прямом коде (их реализации представлены на рис. 4.1). На схеме слева умножение производится начиная с младшего разряда множителя, а на схеме справа – начиная со старшего разряда множителя.
Алгоритм умножения чисел в нормальной форме предусматривает следующие этапы:
сложение порядков сомножителей (находится порядок произведения);
определение знака мантиссы путѐм сложения по модулю два знаков мантисс сомножителей;
умножение мантисс с округлением результата;
нормализация произведения, если это необходимо.
шили на 1). В итоге получили: 20 ∙ 15/16 = 15/16.
Кирьянов Б.Ф. Основы информатики.
88 
Операция деления. Для выполнения этой операции делимое и делитель представляются в прямом коде. Алгоритм выполнении данной операции предусматривает следующие этапы:
вычитание порядка делителя из порядка делимого с использованием дополнительного кода (находится порядок частного);
определение знака мантиссы путѐм сложения по модулю два знаков мантисс делимого и частного;
n-кратное вычитание мантиссы делителя из мантиссы делимого и остатков (в дополнительном коде) с записью в мантиссу частного 1 если получается положительный результат и с записью в неѐ 0 в противном случае (с восстановлением остатка); при этом каждый раз делитель сдвигается на один разряд вправо; n – число разрядов мантиссы;
нормализация частного, если это необходимо.
Погрешность вычислений, обусловленная округлением чисел
При округлении чисел (умножение, деление, сдвиг мантиссы при выравнивании порядков складываемых или вычитаемых чисел) может возникнуть по-
грешность, которая не превышает значения младшего разряда мантиссы.
Убедимся в справедливости указанного на примере сложения чисел в нормальной форме.
1)Точное вычисление результата Z = X + Y вручную:
X = 0 01 0 1001 = 21∙9/16 = 9/8 = 1,125. Y = 0 10 0 1101 = 22∙13/16 = 13/4 = 3,25.
Следовательно, получили Z = 4,375.
2)Вычисление суммы Z на ЭВМ:
X = 0 10 0 01001 – выровняли поряди слагаемых, увеличив порядок слагаемого X на 1 и сдвинув его мантиссу на 1 разряд вправо. После округления мантиссы числа X получаем:
X = 0 10 0 0101 = 22∙5/16 = 5/4 = 1,25, то есть в представлении X появилась погрешность, равная 0,125. С этой погрешностью находится и значение Z:
Z = X + Y = 0 10 0 0101 + 0 10 0 1101 = 0 10 1 0010 – получилось переполнение разрядной сетки мантиссы Z (при сложении двух положительных чисел получен отрицательный результат). По этому признаку ЭВМ корректирует Z: Z = 0 11 0 1001 = 23∙9/16 = 9/2 = 4,5.
Кирьянов Б.Ф. Основы информатики.
89 
4.3.4. Обусловленность вычислительных алгоритмов
Вычислительные алгоритмы служат для вычисления различных величин: интегралов, характеристик технических и других систем, значений оптимальных решений т.д. Они могут входить в алгоритмы других групп. Поскольку к вычислительным алгоритмам часто предъявляются требования эффективности и обусловленности, то поясним смысл обусловленности алгоритма на примере алгоритма вычисления корня квадратного уравнения.
Итак, необходимо вычислить меньший корень уравнения x2 – 140x + 1 = 0 с 5-ю точными знаками после запятой. Пусть эта задача решается на калькуляторе, который точно выполняет операции сложения и вычитания, результаты умножения и деления округляет с 6 знаками после запятой, а при извлечении квадратного корня выдаѐт только 3 точные цифры после запятой (значение указанного корня равно 0,007144…).
Используя известный ещѐ из школьного курса математики метод (алгоритм), находим:
Остальным цифрам, выдаваемым указанным калькулятором ввиду указанного выше доверять нельзя. Поэтому для решения рассматриваемой задачи использованный алгоритм не обусловлен, то есть не позволят решить задачу с необходимой точностью.
Приведѐм ещѐ один алгоритм, который для решения данной задачи является обусловленным:
xмен |
|
|
0,07343, |
|
|
|
|
|
|
|
|
то есть погрешность имеет место только в 6-м разряде после запятой (и, возможно, в последующих). Поэтому второй метод, решающий рассматриваемую задачу с заданной точностью, является обусловленным.
4.4. Структуры алгоритмов. Циклические, итерационные и стохастические алгоритмы
В конечном счѐте для решения задачи по составленному алгоритму нужно разработать программу. Программа является представлением алгоритма на
Кирьянов Б.Ф. Основы информатики.
90 
каком-либо языке. Очевидно один алгоритм может иметь много представлений, то есть много программ на разных языках, решающих одну и ту же задачу.
Каждая программа на языке высокого уровня имеет в ЭВМ своѐ представление в виде машинной программы и соответствующего вычислительного процесса. Итак, программа на языке высокого уровня является представлением алгоритма, а вычислительный процесс – представлением этой программы.
Простейший возможный способ задания простых алгоритмов – запись их словами. Но он практически не используется, так как не является наглядным. В большинстве случаев алгоритмы представляются схематически: это обычно обеспечивает хорошую наглядность представления алгоритма.
Существует два типовых способа схематического представления алгоритмов. Первый из них появился ещѐ в 50-х годах прошлого века. Согласно ему алгоритм представляется в виде блок-схемы, стандартные блоки которой (геометрические фигуры) соединяются стрелками. Такие блоки получили название примитивов. К стандартным примитивам относятся: начало и конец вычисления, ввод и вывод данных, блок вычислений, условный переход. Блоки соединяются линиями со стрелками, показывающими направление вычислительного процесса (последовательности выполнения операций).
Однако блок-схемы могут быть полезны тогда, когда цель состоит в изображении алгоритма в крупном плане. В случае сложных алгоритмов схема становится запутанной паутиной, составление программы по которой является нелѐгкой задачей.
В связи с указанным для описания сложных алгоритмов в последние годы используется другой способ их представления: с помощью псевдокода. Этот способ, рассматриваемый в п. 4.2, считается более удобным.
Существуют различные типы или структуры алгоритмов. Простейшая из них – линейная, когда последовательно выполняются вычисления каждого блока. Например, вычисление среднего значения заболеваемости населения Се- веро-Западного ФО в 2008 году.
Следующим в порядке увеличения сложности является циклический тип алгоритмов. Примером такого типа алгоритма может служить алгоритм вычисления среднего возраста населения города. Основой такого алгоритма является цикл сложения возрастов всех жителей города. После вычисления указанной суммы она делится на число жителей города.
Более сложными являются итерационные структуры (типы) алгоритмов, включающие в себя и циклы. Рассмотрим пример блок-схемы алгоритма
