Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КЛ по ВТиП-часть1.pdf
Скачиваний:
145
Добавлен:
21.02.2016
Размер:
4.73 Mб
Скачать

Лекция 2. Машинная арифметика и погрешности вычислений

Закладывая что-то в память ЭВМ, помните, куда вы это положили.

Первая компьютерная аксиома Лео Бейзера

При любой последовательности вычислений ошибки начнут выявляться на том конце, который противостоит началу проверки.

Закон ошибок Грельба

Двоичные числа

В арифметике обычно используется десятичная система исчисления (с основанием 10). Большинство компьютеров использует арифметику с двоичной системой счисления (основание 2). Может показаться, что это не так, поскольку общение с компьютером (ввод-вывод) происходит в числах с основанием 10. Но это не означает, что компьютеры используют основание 10. На самом деле они приводят входные числа к основанию 2 (или, возможно, к основанию 16), затем выполняют арифметику при основании 2 и наконец преобразовывают ответ к основанию 10 прежде, чем показать результат. Для подтверждения этого требуется несколько экспериментов. Компьютер, который выполняет вычисления с точностью девять десятичных знаков, дает ответ

100000

 

 

0,1

=9999,99447

(2.1)

k=1

Имеются в виду сложение числа 101 100000 раз. Математический ответ ра-

вен точно 10000. Наша цель – понимание оснований очевидной ошибки компьютерного вычисления.

Основание 10 используется в большинстве математических задач. Для иллюстрации представим число 1563 в следующем виде:

1563 =(1 103 )+(5 102 )+(6 101 )+(3 100 )

В общем случае, когда N – положительное целое число, существуют однозначные числа a0 , a1 , ..., ak такие, что число N представимо при основании 10 в

виде:

(ak 10k )+(ak1 10k1 )+ ...+(a1 101 )+(a0 100 ),

 

N =

 

где числа ak

принимают значения {0, 1, .., 8, 9}. Таким образом, N в деся-

тичной записи представимо как

 

 

 

N = akak1 ...a2a1a0ДЕС

(десятичное).

(2.2)

Если использовать степени 2, то число 1563 можно записать в виде:

 

1563 =(1 210 )+(1 29 )+(0 28 )+(0 27 )+(0 26 )+

(2.3)

+(0 25 )+(1 24 )+(1 23 )+(0 22 )+(1

21 )+(1 20 )

 

Этоможноподтвердить, выполниввычисления:

1563 = 1024 + 512 + 16 + 8 + 2 + 1

15

В общем случае, если N положительное целое число, следовательно существуют однозначные числа b0 , b1 , ..., bj , такие, что число N при основании 2 можно

представить в виде: N =(bj 2 j )+(bj1 2 j1 )+ ...+(b1 21 )+(b0 20 ),

(2.4)

где каждое число bj равно либо 0, либо 1. Таким образом, N в двоичном обо-

значенииможно выразить в виде

 

 

N = bjbj1 ...b2b1b0ДВА

(двоичное)

(2.5)

Используя обозначения (2.5) ирезультат (2.3), получим:

1563 = 11000011011ДВА

Замечания. Слово "два" всегда будет употребляться в качестве индекса двоичного числа. Это позволит отличать двоичные числа от обычных чисел с основанием 10. Так, число 111 означает сто одиннадцать, в то время как 111ДВА

– семь.

Ясно, что для двоичного представления числа N потребуется больше цифр, чем для десятичного, поскольку известно, что степень 2 растет намного медленнее, чем 10.

Эффективный алгоритм нахождения представления целого числа N с основанием 2 можно вывести из равенства (2.4). Разделив обе части равенства (2.4) на 2, получим:

N

=(bj

2 j1 )+(bj1

2 j2 )+ ...+(b1

20 )+

b0

.

(2.6)

2

 

 

 

 

2

 

 

Таким образом, остаток от деления числа N на 2 и есть цифра b0 . Далее

определим b . Если (2.6) записать как

N

= Q +

b0

, то

 

 

 

 

 

 

1

2

0

2

 

 

 

 

 

 

).

 

 

Q0 =(bj 2 j1 )+(bj1 2 j2 )+ ...+(b2 21 )+(b1 20

(2.7)

Разделив обе части (2.7) на 2, получим:

Q20 =(bj 2 j2 )+(bj1 2 j3 )+ ...+(b2 20 )+ b21 .

Следовательно, остаток от деления Q0 на 2 равен цифре b1 . Продолжая этот процесс, получим последовательности {Qk } и {bk } отношений и остат-

ков соответственно. Процесс завершится, когда найдется такое целое число J, что QJ =0 . Следовательно, последовательность удовлетворяет следующим

равенствам:

N = 2 Q0 + b0 Q0 = 2 Q1 +b1

M

(2.8)

QJ 2 = 2 QJ 1 +bJ 1

(QJ =0)

QJ 1 = 2 QJ + bJ

16

Научное обозначение

Стандартный метод представления действительного числа, называемый научным обозначением, получается посредством сдвига десятичной точки и присвоения соответствующей степени 10, например:

0,0000747 =7 ,47 105

31,4159265 = 3,1415965 10

9700000000 = 9,7 109

Машинные числа

В компьютерах для действительных чисел используется нормированное двоичное представление с плавающей точкой. Это означает, что математическая величина х на самом деле не хранится в компьютере. Вместо нее в компьютере хранится двоичное приближение х:

x ≈ ±q 2n

(2.9)

Число q является мантиссой, и это конечное двоичное представление, ко-

торое удовлетворяет неравенству 1

2

q < 1 . Целое число n называется пока-

зателем степени.

 

 

 

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

Компьютерные числа с плавающей точкой

Вкомпьютере имеются как целая форма представления чисел, так и форма

сплавающей точкой. Целая форма используется для вычислений с целыми числами и имеет ограниченное применение в численном анализе. Должно быть понятно, что любой компьютер, выполняя (2.9), ограничивает количество цифр, используемых в мантиссе q, и возможный диапазон показателя степени n должен быть ограничен.

Компьютеры с 32 двоичными разрядами, представляя действительное число с обычной точностью, используют 8 двоичных разрядов для показателя степени и 24 двоичных разряда для мантиссы. Они могут представлять действительные числа в интервале

от

2,938736 E 39

до 1,701412E + 38

(т.е. от

2-128 до 2127) с шестью

десятичными знаками точности (например,

223 = 1,2 107 ).

Компьютеры с 48 двоичными разрядами, представляя действительное число с обычной точностью, могут использовать 8 двоичных разрядов для показателя степени и 40 двоичных разрядов для мантиссы. Они могут представлять действительные числа в интервале

 

от

2,9387358771E 39

 

до

1,7014118346 E + 38

(т.е.

от

2-128 до 2127) с 11

десятичными

знаками точности (например,

239

= 1,8 1012 ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

 

 

Если у компьютера имеется 64 двоичных разряда для двойной точности действительного числа, то он может использовать 11 двоичных разрядов для показателя степени и 53 двоичных разряда для мантиссы. Они могут представлять действительные числа в интервале

от

5,562684646268003E 309 до

8,988465674311580E + 307

(т.е. от 2-1024 до 21023) приблизительно с 16 десятичными знаками точности (например, 252 = 2,2 1016 ).

Погрешность решения задачи

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

Если а – точное значение некоторой величины, а а* – известное приближение к нему, то абсолютной погрешностью приближенного значения а* на-

зывают обычно некоторую величину a* = a a* (в общем случае a имеет

размерность величины а).

Относительной погрешностью приближенного значения называют не-

которую величину δ , которая выражается отношением δ = aa** .

Относительную погрешность часто выражают в процентах, и тогда она умножается на сто.

Таким образом, можно заметить, что ошибка – это простая разность между истинным и приближенным значениями, тогда как относительная ошибка – это доля истинного значения.

Так как величина а, как правило, неизвестна, а погрешность необходимо

определить, то в рассмотрение вводится предельная абсолютная погрешность

(a*):

 

 

a* =

 

a a*

 

(a*).

 

(2.10)

 

 

 

Раскрывая в этом неравенстве модуль, получаем соотношение, задающее

отрезок, которому принадлежит точное значение:

 

 

 

a*

(a*)a a* + (a* ).

(2.11)

Таким образом, величина а находится в удвоенной

-окрестности (дельта-

окрестности), определяемой величинами а* и

(a*) и составляющей отрезок

1, х2] (рис. 2.1).

 

 

 

 

 

 

 

 

 

 

 

 

x1 = a*

(a* )

 

a*

x2 = a* + (a* )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(a*)

 

 

 

(a*)

 

 

Рис. 2.1 Область определения решения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18