Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование вычислений. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
1.5. РАСПРОСТРАНЕНИЕ ОШИБОК
2 1 3 2 2 99 70 2
2 1.414213562...
1.4
5
1.41666...
12
1.414
500
2
3
2 1
2 1
6
2 1
3
3 2 2
99 70 2
7
5
0.0046
216
0.0051
15625
0.008
125
17
12
0.00513
24389
0.0052
2985354
0.0046
216
0.6(6)
6
707
500
1758416743
0.005044
78672340886049
15625 10
0.00504
125000000
0.00509
0.02
Один из наиболее важных вопросов в численном анализе – вопрос о том, как ошибка, возникшая в определенном месте в ходе вычислений (или в исходных данных), распространяется дальше, т.е. становится ли её вли­яние больше или меньше по мере того, как производятся последующие операции [3].
Крайним случаем является вычитание двух почти равных чисел: даже при очень маленьких ошибках обоих этих чисел относительная ошибка разности может оказаться очень большой. Эта большая относительная ошибка будет распространяться дальше при выполнении всех последую­щих арифметических операций.
Влияние накопления погрешности на точность результата может быть достаточно заметным даже при не очень сложных вычислениях. Покажем это на примере. Пусть требуется вычислить величину. Это возможно сде­лать многими способами, рассмотрим некоторые из них:
2 1
2 1
3
Вычислим каждое из этих выражений, взяв за приближенное значение ве-
личины
Результаты представлены в табл. 1.
   
числа
6 3
7
17
,
. (2)
707
и
Т а б л и ц а 1
.
1
125
8869743
64
15625
1
1
636056
1
1
 
12
11
Мы получили значительно отличающиеся друг от друга ответы, при-
, , ,
n
u f x x x
i
x
1,
i n

n n n
u f x x x x f x x
i
x
n i i
u df x x x x x
 
i
x
1,
i n
i
x
u
i
x
i
u x
 
i i
u x x
 
u i
x
 
чем все очень неточные (верные знаки подчеркнуты), правильный ответ с точностью 5 значащих цифр 0.0050506. Данный пример показывает, что с приближенными вычислениями нужно обращаться очень аккуратно.
Вообще говоря, любое действие с приближенными числами можно рассматривать как функцию нескольких аргументов.
Пусть задана дифференцируемая функция
,
, – погрешности аргументов функции. Тогда абсолютная по-
1 2
и пусть
грешность функции определяется выражением
Обычно на практике
     
, , , ,
1 1 1
.
– это малые величины, произведениями, квад-
ратами и высшими степенями которых можно пренебречь. Поэтому можно оценить эту погрешность через дифференциал:
n n
u u
, , ,
1 2
x x
1 1
i i
i i
. (3)
Обозначив через
аргументов лых
получим1
, а через
,
, предельные абсолютные погрешности
– предельную погрешность функции u, для ма-
Разделив неравенство (3) на u, получим оценку для относительной
погрешности u:
n n
1 ln
u u
x u x
1 1
i i
i i
следовательно,
n
1
Знак «=» в формуле (4) можно поставить в соответствии с определением предельной погрешности, поскольку полученная величина действительно оценивает погрешность сверху, предполагая, что все погреш­ности аргументов одного знака.
i
i
1
n
1
12
u
. (4)
x
i
,
ln
u
x
i
. (5)
Для примера найдем предельные абсолютную и относительную по-
2
S r
 
5.6 0.05
r
3.14
 
S S S r r r r
      
5.6 2 3.14 5.6 0.05 0.05 1.76 1.8
2 3.14
2 2
см
0.018 2 %
X Y
   
X Y
 
X Y
   
X Y
 
X Y
 
X Y
   
X Y
 
X Y
   
3
2 1
2 1
6
2 1
3
3 2 2
99 70 2
грешность площади круга
1 0.01
2
   
, если
r
см, а
2
2
см3.
.
Поэтому
S r  , а значит, предельная относительная
98,5 1.8
погрешность
2
1.8 см
 
S
98.5 см
2
.
Заметим, что основные арифметические действия можно также рас­сматривать как функции двух переменных. Поэтому если в формулах (4) и (5) в качестве функции u взять одну из функций двух аргументов: сумму, разность, произведение или частное, то можно легко получить формулы для предельных погрешностей основных арифметических действий:
X Y
X Y
X Y
/
X Y
,
,
Y X
1
Y Y
X Y
X Y
X
2
X Y
X Y X Y
X Y
X Y X Y
,
X Y
,
X Y
, (6)
, (7)
, (8)
. (9)
Обратим внимание, что согласно формулам (6), (7) вычитание (сложение) близких по абсолютной величине чисел одного знака (разного знака) может приводить к очень существенному росту относительной погрешности.
Вернемся теперь к вычислениям, приведенным в табл. 1. Именно из-за вычитания близких чисел и возникает большая относительная погреш­ность. Как видно из таблицы, различные по последовательности действий (математически одинаковые) формулы расположились по возрастанию погрешности в следующем порядке:
,
,
13
,
.
Покажем, что с помощью дифференциала о таком расположении можно
2
3
1
1
6
1
3
3 2
f x
99 70
f x
x x
   
x x x
   
x x x x
     
x x x
   
7
5
x
 
x
 
x
 
x
 
7
5
было бы узнать и до вычислений. Для этого вычислим относительные по­грешности каждой из формул, выбрав в них в качестве параметра
x
Пусть
f
1
x
f
f x
,
2
d x
1
dx x x x
1 1 1
ln 3
1 1 1
,
3
3
,
4
,
x .
. Тогда
d
f
3
dx x x
f
4
d
f
ln 3 2 3 6
ln 1 6
2
dx x
3
d
ln 99 70
dx x
6
3 2 3 2
Подставляя теперь одно из значений x, например,
6.25
f
1
,
15
f
2
,
f
3
1
1
2 1
70
99 70
x
30
,
f
4
,
.
, получим
70
,
.
Таким образом, оценки погрешностей также указывают на меньшую погрешность при вычислениях по первой формуле.
При использовании полученных оценок необходимо понимать, что они часто являются завышенными (например, можно сравнить получен-
ные оценки для
с реальными погрешностями, которые легко полу-
x
чить из табл. 1 ). Поэтому выбирать по этим оценкам наилучший способ вычислений разумно, но гарантировать, что при реальных вычислениях погрешности будут именно такими, нельзя (правда, они могут быть только меньше, чем полученные оценки).
Заметим, что ошибки округления в формулах (6)–(9) не учитываются, поэтому, если необходимо подсчитать, как распространяется погрешность в последующих арифметических операциях, то следует к вычисленной по одной из формул ошибке прибавить ошибку округления.
14
1.6. ОБЩИЕ РЕКОМЕНДАЦИИ ПО ПОВЫШЕНИЮ
35
10
30 20 27
10 10 10
30 20 27
23
10
0.124, 0.00100, 1.21
a b c

0.124 0.00100 1.21 0.125 1.21 1.34
 

0.124 0.00100 1.21 0.124 1.21 1.33
140 1 0
 
70 4899
4899 69.992
70 69.99 0,01
ТОЧНОСТИ ВЫЧИСЛЕНИЙ
Заметим, что в компьютере арифметические операции утрачивают привычные свойства коммутативности, ассоциативности, дистрибутивно­сти. Это следует учитывать при программировании сложных выражений. Например, пусть максимально представимое значение вещественного
числа
, тогда результаты вычисления выражений
и
10 10 10
будут разными: вычисление первого выражения приведет к переполне­нию, а второго – даст результат
. Аналогичный пример можно приве-
сти для операции сложения.
Естественно, последствия могут быть не столь суровыми и выра­жаться не в исключительной ситуации, а в небольшой погрешности. Например, пусть необходимо сложить три числа:
.
Если вычисления проводятся с трехзначной мантиссой, то
a b c
,
a b c
Отсутствие привычных свойств арифметических операций является одной из причин, по которой нельзя сравнивать вещественные числа, полученные в результате вычисления каких-либо выражений на строгое равенство.
Рассмотрим пример, показывающий, что повышение точности иногда может быть достигнуто за счет несложного алгебраического преобразова­ния. Пусть необходимо вычислить наименьший корень уравнения [5]
2
y y
Для определенности будем считать, что вычисления производятся в деся­тичной системе счисления, причем в мантиссе числа после округлений удерживается 4 разряда, т.е. до округления
y
,
после округления
y
15
.
.
,
.
То же самое значение y можно, «избавившись от иррациональности
70 4899
70 69.99 139.99
70 69.99 140.0
0.00714285...,
140
0.007143
2
j
1 000 000
2
1
n
1,...,1000 000
n
0
2
1
n
1 000 000,...,1
n
0
1 000 000 0
S C
в числителе», представить в виде
y
1
.
Последовательно проводя вычисления, получаем
и после округления
Наконец,
1
и после округления
.
y
.
Проводя вычисления с дополнительными разрядами, можно прове­рить, что в обоих случаях все подчеркнутые цифры результатов верные, однако во втором случае точность результата существенно выше. Дело в том, что в первом случае пришлось вычитать близкие большие числа; так как эти числа были большие, то они были округлены с большой абсолютной погрешностью, в результате и ответ получился с большой абсолютной погрешностью. Это явление называется потеря значащих цифр, оно имеет место при вычитании близких величин.
Рассмотрим другой типичный пример [5], где порядок выполнения операций влияет на погрешность результата. На компьютере с плавающей точкой вычисляется значение суммы
1 000 000
Можно вычислить
S
S
1 000 000
.
11j
либо в цикле по убыванию значения слага-
емого, которому соответствует рекуррентная формула
S S
n n
,
1
S
,
, (10)
0
либо в цикле по возрастанию значения слагаемого, т.е. по рекуррентной формуле
С С
1
n n
,
,
C
1 000 000
,
. (11)
Оказывается, во втором случае суммарная вычислительная погрешность существенно меньше.
16
Дело заключается в том, что в современных компьютерах сложение чисел осуществляется по следующей схеме. Сначала слагаемые a и b при­водятся к расширенному формату2 (в нем под мантиссу отводится больше бит), а затем происходит отбрасывание последних знаков и округление результата с тем, чтобы осталось t бит мантиссы, в соответствии с типом результата (например, для чисел одинарной точности, если величина представляется в нормализованном виде, то ется приближенное значение суммы
щей
2ta b
, но в неблагоприятном случае большей, чем
с погрешностью, не превосходя-
a b
). В результате получа-
24t
12t
 
a b
a b
.
В первом случае числа складываются по убыванию значения, поэтому при каждом сложении значение суммы больше единицы и в принципе воз­можно получение погрешности
1000 000 2t
. Во втором случае достаточно
долго погрешность копится в разрядах, не влияющих существенно на окончательный результат. Эти рассуждения легко проверяются экспери­ментально. Если провести вычисления одинарной точности по алгоритму (10), т.е. складывая числа в порядке убывания, получим погрешность
  , а при вычислениях по алгоритму (11), т.е. в порядке возрастания,
получим погрешность
  .
6 10
8
4
2 10
Очевидно, что мы привели этот пример не для того, чтобы показать, что необходимо каждый раз, складывая числа, предварительно упорядочи­вать их. Такая сортировка в большинстве случаев неоправданно затратна. Проблему уточнения результата суммирования в большинстве случаев можно решить гораздо проще: использовать для накопления результата суммирования переменную с большей длиной мантиссы, чем у слагаемых. Основная цель этого примера в том, чтобы показать необходимость заду­маться об оптимизации порядка действий там, где это возможно без до­полнительных затрат.
Чтобы избежать проблем, подобных описанным выше, можно вос­пользоваться следующими несложными рекомендациями:
1) если необходимо провести сложение-вычитание длинной последо­вательности чисел, то начинать надо с наименьших чисел (если это не тре­бует их дополнительной сортировки);
2) желательно избавиться от вычитания двух почти равных чисел, по возможности преобразуя формулы;
2
10 байт, см. п. 2.3, стр.25
17
3) если язык программирования и компьютер позволяют использовать
n
n
P x a a x a x a x
x x

... ...
вещественные числа разных типов (с разным количеством хранимых разрядов числа), то увеличение числа разрядов всегда повышает точность вычисле­ний (правда, в ущерб памяти);
4) необходимо сводить к минимуму число используемых арифметиче­ских операций (эта рекомендация вообще-то нужна и для ускорения ра­боты программ).
Для иллюстрации последней рекомендации можно в качестве примера привести хорошо известную схему Горнера3 вычисления значения поли­нома. Она существенно уменьшает количество операций и часто повышает точность вычислений.
1.7. ПРАВИЛА ПОДСЧЕТА ВЕРНЫХ ЦИФР (ПО В.М. БРАДИСУ)
В предыдущих пунктах мы рассмотрели способы оценки предельной абсолютной погрешности арифметических действий. При этом предпола­галось, что абсолютные погрешности аргументов усиливают друг друга, а это практически бывает сравнительно редко. Для оценки же погрешности вычислений при небольшом числе действий (например, при ручных вычислениях) можно воспользоваться следующими эмпирическими пра­вилами. Эти правила даются в предположении, что аргументы действий содержат только верные цифры и число действий невелико.
1. При сложении и вычитании приближенных чисел в результате сле­дует сохранить столько десятичных знаков, сколько их в приближенном данном с наименьшим числом десятичных знаков после запятой.
2. При умножении и делении в результате следует сохранить столько значащих цифр, сколько их в приближенном данном с наименьшим чис­лом верных значащих цифр.
3. При вычислении промежуточных результатов следует сохранить на одну цифру больше, чем рекомендуют правила 1, 2. В окончательном ре­зультате эта «запасная цифра» отбрасывается.
3
Схемой Горнера называют вычисление полинома
значения
по формуле
    для фиксированного
 
0 1 2
P x a x a x a x a a x
   
0 1 2 1 1
n n
18
2
...
.
4. Если данные можно брать с произвольной точностью, то для полу-
1m
чения результата с m верными цифрами исходные данные следует брать с таким числом цифр, которые, согласно предыдущим правилам, обеспе­чивают
цифру в результате.
Эти правила подсчета цифр эмпирические: они описывают наиболее вероятные ситуации, хотя существуют примеры, не удовлетворяющие этим правилам. Следовательно, вычисления способом подсчета цифр – самый грубый способ оценки погрешности результатов действий. Однако он очень прост и удобен, а точность таких вычислений вполне достаточна для большинства технических расчетов. Поэтому данный способ широко рас­пространен, например в практике измерений.
Обратим внимание, что при компьютерных вычислениях нет смысла производить промежуточные округления, поскольку это лишь замедлит вычисления и может привести к дополнительной погрешности (например, в силу ошибок программирования), а следует округлять только конечный результат.
ГЛАВА 2. ПРЕДСТАВЛЕНИЕ ВЕЩЕСТВЕННЫХ ЧИСЕЛ В ЭВМ
p
A m q
1
N
2
q
2
N
G p g
При программировании вычислительных задач необходимо знать осо­бенности представления вещественных чисел в компьютере. Это связано с тем, что в отличие от целых чисел вещественные числа (например, ирра­циональные) не всегда могут быть представлены точно, и поэтому при их использовании требуется учесть погрешность округления и правильно организовать вычисления в исключительных ситуациях.
Представление вещественных чисел в большинстве современных ком­пьютеров соответствует принятому в 2008 году стандарту IEEE 754. Стан­дарт IEEE 754–2008 регламентирует:
определения двоичных форматов хранения мантиссы, показателя и знака, форматы положительного и отрицательного нуля, плюс и минус бесконечностей, а также определение «не числа» (NaN);
методы, которые используются для преобразования числа в про- цессе математических операций;
обработку исключительных ситуаций таких, как деление на нуль, переполнение, исчезновение порядка, работу с денормализованными чис­лами и т.д.;
арифметические и другие операции с вещественными числами в различных форматах.
2.1. ОБЩИЕ ПРИНЦИПЫ ПРЕДСТАВЛЕНИЯ ВЕЩЕСТВЕННОГО ЧИСЛА
Как уже было сказано выше, любое число A может быть представлено в виде
, где p – порядок числа A; q – основание системы счис-
ления; m – мантисса числа A. Стандарт определяет, что в двоичном пред­ставлении вещественного числа выделяется три группы бит. Первая группа состоит из одного бита s и определяет знак числа, 0 – положитель­ный, 1 – отрицательный. Вторая группа содержит
для хранения информации о порядке числа для основания
группа содержит
бит и предназначена для хранения информации
бит и предназначена
. Третья
о мантиссе числа.
В качестве информации о порядке представляемого числа хранится так называемая характеристика
, где g – сдвиг порядка. Сдвиг
нужен для того, чтобы можно было хранить как положительные, так и
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]