Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_03.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
208.9 Кб
Скачать

2.2 Представление чисел на компьютере.

В машинных вычислениях участвуют числа двух типов: целые числа и числа с плавающей точкой (вещественные числа).

В большинстве компьютеров внутреннее представление чисел – двоичное, т.е. числа в них представляются в виде последовательностей нулей и единиц. Такое представление чисел в компьютере обусловлено технологией аппаратной реализации компьютера. Однако чтобы лучше проиллюстрировать особенности машинной арифметики, отделив их от деталей аппаратной реализации, в данном изложении будем опираться не на двоичную, а на более понятную десятичную систему счисления. Вопросы машинной арифметики будут рассмотрены с той степенью детализации, которая необходима для понимания процесса машинных вычислений.

2.3 Машинное представление целых чисел.

Машинные числа представляются конечным количеством разрядов. Для иллюстрации будем считать, что в компьютере целые числа представляются с использованием шести десятичных знаков. Понятно, что каждое целое число также характеризуется знаком + или . Это означает, что количество машинных целых чисел конечно. В данном случае наименьшим будет целое число  999999, а наибольшим будет число 999999. Целые числа, лежащие за границами интервала значений [ 999999, 999999], для данного компьютера просто не существуют.

Если работать с целыми числами, которые далеки от границ числовой области компьютера, то машинная арифметика даёт правильные результаты, например, 5 + 7 = 12, 8  27 = 19 и 273 = 81. Деление целых чисел приводит снова к целому числу: в качестве результата операции принимается частное (которое является целым), а остаток отбрасывается, например: , , , и так далее.

Если результат операции над целыми числами слишком велик или слишком мал для данного компьютера, то последствия трудно предсказать. В этом случае на одних компьютерах будет выдано сообщение об ошибке, а выполнение текущего вычисления прекращено. На других компьютерах результат вычисления будет заменён по циклическому правилу, а вычисления продолжено без какого-либо указания об ошибке. Так, для нашего примера было бы 999999 + 1 =  999999. Таким образом, нельзя полагаться на результаты вычислений, выходящих за пределы числовой области компьютера.

Эти замечания в равной степени приложимы к операциям с целыми числами, выполняемым в двоичной арифметике, хотя значения наибольшего и наименьшего числа будут иными. В компьютерах ряда популярных моделей для хранения целого числа отводится 32 двоичных разряда, причём один разряд используется для хранения знака числа. В этом случае наибольшим целым числом является число 231  1 = 2 147 483 647, а наименьшим является число  231 .

2.4 Машинное представление вещественных чисел: арифметика с плавающей точкой.

Представление числа x в арифметике с плавающей точкой иногда обозначают через fl(x) от английского слова float – плавающий.

Десятичное число с плавающей точкой – это число, представленное в виде:

а10b;

где число а называется мантиссой, а число bпоказателем.

Обычно число b  целое, а у числа а слева от десятичной точки находится только один разряд (не считая знака числа).

У обеих чисел а и b количество разрядов конечно, поэтому множество чисел с плавающей точкой – конечно и, в частности, существуют наибольшее и наименьшее числа с плавающей точкой.

Для последующей иллюстрации введём арифметику с плавающей точкой, в которой мантисса а имеет четыре, а показатель b  два десятичных разряда. Вот несколько примеров чисел с плавающей точкой:

4.6781000 = 4.678,

 3.3551003 =  3355;

9.8761012 = 0.000000000009876.

В этой системе наименьшее и наибольшие числа суть  9.9991099 и 9.9991099. В данном случае между нулём и наименьшим положительным числом имеется разрыв, равный 0.0011099 = 10102. В данном случае число 0.0011099 будет называться машинным нулём, а число 9.9991099машинной бесконечностью. При этом числа из промежутка [ 0.0011099; 0.0011099] машина будет заменять нулём, а числа, лежащие за пределами промежутка [9.99911099; 9.9991099] она не воспринимает (без специальных ухищрений).

Результат операции над числами с плавающей точкой обычно не бывает точным. Для примера рассмотрим в нашей системе вычисление:

1.2341000 + 5.6781004 = 1.234+ 0.0005678 = 1.2345678.

Однако полученный результат не может быть представлен точно в «нашей машинной арифметике», поскольку как число с плавающей точкой он должен быть редуцирован до четырёх разрядов. Усечение (не округление, а простое отбрасывание последних цифр результата) в данном случае даёт 1.2341000 . То есть в рамках используемой машинной арифметики с плавающей точкой прибавление к числу 1.2341000 числа 5.6781004 равносильно отсутствию такого прибавления.

В данном случае использование правила округления, вместо усечения, привело бы к более точному результату 1.2351000. Различие между точным ответом и ответом, полученным в машинной арифметике, называется ошибкой округления, не зависимо от того, использовалось при этом действительное округление или просто усечение.

Проектирование процессоров, обеспечивающих действительно надёжную арифметику с плавающей точкой, оказалось очень сложной задачей. Имеется масса примеров обычных вычислений на компьютере, дающих неправильные результаты, последствия которых могут быть весьма серьёзными.

2.5 Машинные константы.

Как следует из примера, рассмотренного в предыдущем разделе, при сложении машинных чисел различной величины результат может оказаться точно равным одному из слагаемых. Рассмотрим ещё один пример:

1.0001000 + 1.0001004 = 1.000+ 0.0001 = 1.0001  1.0001000.

Из приведённого примера видно, что в рамках рассматриваемой машинной арифметики с плавающей точкой меньшее число из двух рассмотренных можно было бы просто заменить нулём.

Для рассматриваемой здесь арифметики с плавающей точкой в любом случае сумма числа с плавающей точкой и числа 1.0 будет иметь только три верных десятичных знака. Действительно, пусть мы складываем два числа x1 и x2 с плавающей точкой, причём пусть у данных чисел верными являются все четыре значащие цифры, т.е. в данном случае x1 = x2 = 0.0005. Поэтому предельная абсолютная погрешность сумы u данных чисел равна: u = 0.0005 + 0.0005 = 0.001; а это означает, что сумма имеет только три верных значащих цифры.

Определение. Наименьшее число с плавающей точкой, которое при сложении с числом 1.0 даёт результат больший чем 1.0 называется машинным эпсилоном и обозначается маш.

Говоря иначе, машинный эпсилонмаш (или просто ) это величина, определяющая расстояние, между единицей и ближайшим, следующим за ней числом системы машинных чисел с плавающей точкой.

Для арифметики с плавающей точкой, в которой мантисса (а) имеет четыре, а показатель (b)  два десятичных разряда единица может быть представлена следующим образом:

fl(1) = 1.0001000 = 11000 + 01001 + 01002 + 01003;

При этом следующее за машинной единицей число есть: 1.0011000:

1.0011000 = 11000 + 01001 + 01002 + 11003

Тогда в соответствии с определением машинного эпсилона имеем:

1.0011000 = fl( 1 + )

Поэтому = 11003.= 0.001

Конкретное значение маш зависит от того, какая арифметика реализована на компьютере – с округлением или усечением.

Ели применяется усечение, то для рассматриваемой здесь арифметики с плавающей точкой, маш.= 0.001 = 1.000 1003.

Необходимо также отметить, что машинный эпсилон непосредственно связан с относительной погрешностью представления чисел в системе с плавающей точкой.

Действительно, пусть x – некоторое точное число отличное от нуля:

x = 11000 + 21001 + 31002 +  41003 + 51004 + 61005 +…

В рамках рассматриваемой четырёх разрядной арифметики (с усечением) на компьютере данное (точное) число x будет представлено в виде следующего приближённого числа:

fl(x) = 11000 + 21001 + 31002 + 41003

Тогда по определению относительной погрешности приближённого числа fl(x) имеем:

Очевидно, что в любом случае величина 11000  1, поэтому при замене 11000 на 1 (т.е. 11000 1), последнее неравенство только усилится.

Также, как отмечалось в лекции 1, (при доказательстве теоремы 2) можно показать, что (51004 + 61005 +…)  91004(10/9)  1003, поэтому получаем, что:

. 

(8)

Таким образом, машинный эпсилон служит мерой относительной точности представления вещественных чисел, причём эта точность одинакова в любой части числового диапазона и зависит лишь от количества (в данном случае десятичных) разрядов, отводимых под мантиссу числа.

В тоже время можно показать, что если x – некоторое число отличное от нуля, то для абсолютной погрешности представления этого числа на компьютере верна оценка:

xfl(x)x. (9)

Действительно, в силу неравенства (8) имеем:

, (10)

поэтому из (10) следует, что = xfl(x)  x .

Соотношение (9) показывает, что расстояние между вещественными числами и конечными приближениями к ним в системе с плавающей точкой неодинаковы в различных частях числового диапазона.

Замечание. Если в компьютере реализовано округление, то для рассматриваемой арифметики с четырьмя десятичными знаками маш.= 0.0005 = 5.0001004.

Действительно, пусть в компьютере реализована арифметика, в соответствии которой все десятичные знаки числа, меньшие минимального десятичного разряда мантиссы не отбрасываются (т.е. усекаются), а округляются до указанного минимального разряда (в соответствии с правилом округления по дополнению). Тогда исходя из определения машинного эпсилона (как минимального положительного действительного числа, прибавление которого к единице даёт следующее за единицей число с плавающей точкой) имеем:

fl (1 + ) = 11000 + 01001 + 01002 + 01003 + 5.00004 = 1.001 > 1.

Следовательно, в данном случае маш = = 0.0005 = 5.0001004.

Рассматривая арифметические операции над машинными числами, необходимо отметить, что они утрачивают некоторые привычные нам математические свойства. Особенно это касается свойств ассоциативности: (xy)z = x(yz) и дистрибутивности: с (a + b) = са + cb и (а + b)c = ас + bc, нарушаемых при выполнении арифметических операций на любых ЭВМ (сохранение или не сохранение свойства коммутативности на ЭВМ связывают со способом округления чисел). Проиллюстрируем это на простом примере.

Пусть D – таково, что 10D – правая граница числового диапазона. В данном обозначении сравним два выражения.

( 10D/2103D/4 ) 10D/2 и 10D/2 ( 103D/4 ) 10D/2

Сравнение данных выражений показывает существенность способа расстановки скобок при умножении. Так для первого выражения машина выдаст сообщение о переполнении в силу того, что 10D/2103D/4 > 10D, а во втором случае будет получен правильный результат.

Также легко представить ситуацию с тремя положительными числами a, b, c, когда расставляя по-разному скобки в выражении a + bc, будем получать (или вовсе не получать) разные ответы, например для получения правильного результата в выражении 9.9991099 + 1.0001000  9.9991099 исключительно важна «правильная» расстановка скобок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]