Автор работы: Пользователь скрыл имя, 09 Декабря 2012 в 10:21, курс лекций
Временем появления на Земле вида «человек разумный» вполне можно считать тот момент, когда представители этого вида стали собирать, осмысливать, обрабатывать, хранить и передавать разнообразную информацию. Таким образом, человечество (социум) постоянно имеет дело с информацией.
Строгого научного определения понятия «информация» нет. Существует более 300 толкований этого термина.
Многие программисты годами пишут свои программы, не понимая, что такое числа с плавающей запятой, и чем они отличаются от «обычных», целых чисел. Это не мешает им создавать хорошие программы. Но в конце концов каждый сталкивается с «необъяснимым» явлением:
$a = 1.1 - 1;
$b = 0.1;
if ($a == $b)
print "$a равно $b";
else
print "$a не равно $b";
Эта программа печатает «0.1 не равно 0.1». В чём дело? Напрашивается вывод, что в языке программирования что-то не в порядке. В сети можно найти немало переписок с разработчиками языков о подобных «ошибках». На самом же деле, этот пример демонстрирует некоторые важные свойства хранения и представления чисел в ЭВМ. Рассмотрим эти особенности более подробно.
Разница между точным числом и его приближённым значением называется погрешностью данного приближенного числа. Если известно, что , то величина называется предельной абсолютной погрешностью приближенной величины .
Отношение называется предельной относительной погрешностью; последнюю часто выражают в процентах.
Оговоримся, что разрядная сетка машины имеет постоянное число разрядов - . При представлении чисел с фиксированной запятой считают, что запятая всегда находится перед старшим разрядом, а все числа, которые участвуют в вычислениях, считаются по абсолютной величине меньше единицы.
Введём две характеристики чисел: диапазон изменения и точность представления.
Диапазон изменения характеризуется теми пределами, в которых могут находиться числа, с которыми оперирует машина.
Отличное от нуля самое малое число:
Таким образом, диапазон чисел, с которыми работает ЭВМ, есть:
Иными словами, числа, которые выходят за диапазон изменения, в ЭВМ не могут быть представлены точно. Если то такое число воспринимается как нуль.
Если то такое число воспринимается как бесконечно большое. Этим двум случаям соответствуют понятия машинного нуля и машинной бесконечности.
При оптимальном округлении абсолютная ошибка:
Минимальная относительная ошибка:
так как при больших
Максимальная относительная ошибка:
Ошибка представления числа зависит от величины самого числа и способа округления. Заметим, что для малых чисел ошибка может достигать большой величины.
В ЭВМ с плавающей запятой число представляется в виде:
, где:
- мантисса числа;
- основание системы счисления;
- порядок.
Разрядная сетка машины принимает следующий вид:
Это лишь условное изображение основных слогов в числе. Заметим, что в реальной ЭВМ может быть принят любой другой порядок расположения.
Пусть разрядов отведено под изображение мантиссы, а разрядов под изображение порядка. Тогда для двоичной системы и нормализованного вида числа:
- нормализованная мантисса.
То есть диапазон чисел:
Абсолютная ошибка представления числа в ЭВМ с плавающей запятой равна:
Так как , минимальная относительная ошибка:
, при больших
а максимальная относительная ошибка:
Видно, что относительная ошибка в ЭВМ с плавающей запятой не зависит от порядка числа. При этом точность представления больших и малых чисел изменяется незначительно.
Теоретически «плавающая запятая» имеет преимущества перед «фиксированной». Но соответствующее устройство получается намного сложнее. К тому же специфика выполнения операций с плавающей запятой требует большего числа микроопераций, что приводит к снижению быстродействия ЭВМ.
Основной особенностью различных методов выполнения арифметических операций является то, что любая операция (сложение, вычитание, умножение, деление и др.) сводится к некоторой последовательности микроопераций, таких как:
Сложение выполняется по правилам сложения чисел в позиционных системах счисления. То есть эта операция выполняется поразрядно, а возникающий в младших разрядах перенос направляется в старшие разряды.
Пример:
0,101101 1-ое слагаемое
+0,000101 2-ое слагаемое
________
0,101000 сумма
0,00101 перенос
________
0,100010 сумма
0,01 перенос
________
0,110010 сумма
Операции сложения производятся одновременно над всеми разрядами двух слагаемых и продолжаются до тех пор, пока возникают переносы. Возникающие переносы приводят к продолжению операции. Это одна из особенностей позиционных систем. Видим, что собственно операция определения частичной суммы слагаемых выполняется в один приём, а возникающие переносы распространяются на всё более старшие разряды.
Различают два вида микрооперации сдвига:
Логический сдвиг приводит к смещению всех разрядов числа, включая и знак, влево или вправо. При этом освобождающиеся разряды заполняются нулями или единицами. Арифметический сдвиг выполняется над частью числа, часть сдвинутых разрядов теряется. (Очевидно, знаковый разряд должен исключаться из рассмотрения).
Эта микрооперация предполагает, что некоторый код (число) записывается в соответствующее устройство и вытесняет тот код, который там находился до передачи.
Различают два вида передач:
Функция, выполняемая над передаваемыми числами, называется преобразованием. Чаще других в арифметических основах рассматривают инвертирование кода. Это поразрядная микрооперация , которая выполняется над всеми разрядами одновременно.
Основное неудобство построения устройств, реализующих арифметические операции, состоит в сложном характере алгоритма вычитания. Для его преодоления в ЭВМ всегда операция выполняется по иным правилам, чем это делается обычно. В его основе лежит операция сложения. Алгоритмы выполнения такого рода операций требуют специальных кодов представления отрицательных чисел.
Это естественное и наиболее привычное
представление числа в
знак:
В цифровых разрядах пишется модуль положительного или отрицательного числа.
- обозначим таким образом изображение числа « » в прямом коде.
Рассмотрим диапазоны представляемых чисел:
- изображение положительного нуля
- изображение отрицательного нуля.
Таким образом, нуль имеет двоякое изображение.
Замечания:
Собственно умножение
Вследствие ряда неудобств в ЭВМ операции вычитания, сложения чисел с разными знаками и деления в прямом коде практически не выполняются.
Дополнительным называется код, в котором для положительного числа в знаковом разряде пишется «0», в цифровых - модуль числа, а для отрицательного в знаковом разряде пишется «1», в цифровых - дополнение числа до единицы.
Если некоторое нужно представить в дополнительном коде, то
Диапазоны представленных чисел:
- положительный ноль
- максимальное положительное число
- минимальное отрицательное число
- наибольшее(по модулю) отрицательное число.
Таким образом, нуль имеет единственное представление.
В самом деле, так как
, то в дополнительном коде: , если в разрядной сетке ЭВМ нет второго знакового разряда, то это переполнение теряется, и в знаковом разряде будет только нуль.
Важная особенность в
где
Таким образом, для записи дополнительного кода отрицательного числа необходимо в знаковом разряде поставить единицу, проинвертировать все цифровые разряды числа и прибавить единицу в младший разряд. Это также правило перевода из дополнительного кода в прямой код.
Рассмотрим на примерах выполнение операции сложения двух чисел с разными знаками.
Возможны следующие случаи:
Необходимо помнить, что нельзя, выполняя операции, выходить за диапазон представляемых в данной разрядной сетке чисел, записанных с фиксированной запятой.
Положим , 1 - знаковый разряд и 2 - цифровых.
и
В дополнительном коде
То есть, нет никаких особенностей.
и
В дополнительном коде
Переполнение теряется и получается верный результат
и
В дополнительном коде
и
В дополнительном коде
Возникающее переполнение теряется и общий результат отрицательный.
Таким образом, важной особенностью дополнительного кода является то, что знаковый разряд в процессе выполнения операции рассматривается совместно с цифровыми. Возникающие переносы теряются и не влияют на результат операции.
Обратным называется код, для которого в знаковом разряде положительного числа пишется «0», в цифровых - модуль числа, а для отрицательного - в знаковом разряде пишется единица, в цифровых - инвертированные разряды исходного числа.
Определим диапазоны чисел:
- положительный ноль
В обратном коде есть два изображения нуля:
«Положительный» нуль: и «отрицательный» нуль:
При этом
То есть, единица переноса в знаковом разряде эквивалентна единице младшего разряда. Поэтому при выполнении операции сложения-вычитания необходимо возникающий перенос циклически прибавлять в младший разряд частичного результата.
Рассмотрим прежние четыре случая, помня о том, что сумма двух слагаемых по модулю должна быть меньше единицы.
и
В обратном коде
Возникающее переполнение должно быть добавлено к младшему разряду частичной суммы.
и
В обратном коде:
Нет никаких особенностей по сравнению с прямым кодом.
и
В обратном коде:
То есть, не возникает циклического переноса.
и
В обратном коде:
Возникает переполнение знакового разряда, которое добавляется в младший разряд частичной суммы.
Заметим, что получение обратного кода проще, чем дополнительного. Это поразрядно выполняемая микро операция инверсии кода. Как станет ясно из схемного решения, эта микрооперация выполняется так же быстро, как и передача кода. Поскольку результатом операции является совокупность результатов по всем разрядам, то данную операцию можно выполнять одновременно над всеми цифровыми разрядами.
В состав компьютера входит большое число функциональных элементов, таких как оперативная память, процессор, контроллеры, внешние запоминающие устройства, периферийные устройства и др.Для эффективного управления работой этими устройствами как системой используют программы, получившие название системными или системное программное обеспечение. Без системного программного обеспечения работа на компьютере невозможна.
Системное программное обеспечение - совокупность программ и программных комплексов для обеспечения работы компьютера и вычислительных сетей. Системное программное обеспечение ориентировано:
По-английски: System software.
Таким образом, системное программное обеспечение предназначено для координации работы различных компонентов компьютера и играет роль посредника между прикладными программами и аппаратным обеспечением. К системному программному обеспечению относят: