Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
krav.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

Пример 1

Сложение положительных чисел, расположенных в по­рядке возрастания их величин. Рассмотрим задачу сложе­ния четырех положительных чисел:

y=x1+x2+x3+x4,

где

0 < x1 < x2 < x3 < x4.

Граф этого процесса изображен на рис. 2.3. Предполо­жим, что все исходные вели­чины заданы точно и не имеют ошибок, и пусть

r1 , r2 и r3 являются относительными ошибками округления после каждой следующей операции

сложения. Последовательное применение правила для под­счета полной ошибки окончательного результата приводит к формуле

Рис. 2.3. Граф вычислитель­ного процесса для сложения y = x1+ x2 + +x3+ x4 , причем О < x1 < x2 < x3 < x4.

Сокращая сумму x1+x2+x3 в первом члене и умножая все

выражение на y=x1+x2+x3+x4 , получаем

ey=r1(x1+x2)+r2(x1+x2+x3)+r3(x1+x2+x3+x4).

Учитывая, что ошибка округления равна 5-10-t, оконча­тельно

имеем

|ey|(3x1+3x2+2x3+x4)*5*10-t.

Из этой формулы ясно, что максимально возможная ошибка (абсолютная или относительная), обусловленная округле­нием, становится меньше, если сначала складывать меньшие числа.

Результат довольно удивительный, так как вся класси­ческая математическая подготовка инженера или ученого основана на предположении, что при перемене мест слагае­мых или их группировке сумма не изменяется, причем зачастую эти свойства операции сложения просто постули­руются. Разница, если она до сих пор не очевидна читателю, заключается в том, что ЭЦВМ не может производить вычис­ления с. бесконечно большой точностью, а именно такие вычисления рассматриваются в классической математике. Любое число в ЭЦВМ должно быть представлено с помощью конечного набора значащих цифр, и вот это-то простое огра­ничение может самым неожиданным образом изменить многие «само собой разумеющиеся» математические правила.

Для сложения п чисел, не имеющих первоначально ника­ких ошибок, общая формула для ошибки округления запи­шется так:

|ey|[(n-1)x1+(n-1)x2+(n-2)x3+ … 2xn-1+xn]*5*10-t.

Рассмотрим численный пример. Предположим, что необходимо найти сумму следующих чисел:

0.2897*100

0.4976*100

0.2488*101

0.7259*101

0.1638*102

0.6249*102

0.2162*103

0.5233*103

0.1403*104

0.5291*104

Если сложение производится, начиная с наименьшего числа в порядке возрастания чисел, то последовательно получающиеся частичные суммы будут такими, как показано ниже. (Первая частичная сумма есть сумма первых двух чисел, вторая частичная сумма есть сумма первой час­тичной суммы и третьего числа и т. д.) Необходимо помнить, что «применяемая» нами ЭЦВМ имеет четыре значащих цифры в мантиссе каждого числа, а все числа, мантиссы которых имеют более четырех значащих цифр, должны быть округлены. Это условие лежит в основе всех выкладок данного параграфа, хотя для реальных ЭЦВМ была бы более типичной мантисса, содержащая восемь значащих цифр.

0.7873*100

0.3275*101

0.1053*102

0.2691*102

0.8940*102

0.3056*103

0.8289*103

0.2232*104

0.7523*104

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

0.6694*104

0.7217*104

0.7433*104

0.7495*104

0.7511*104

0.7518*104

0.7520*104

0.7520*104

0.7520*104

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

-0.1*100 , в то время как при обратном порядке вычислений ошибка равна 2.9.10°, или почти в 30 раз больше.

Максимально возможные ошибки составляют 5.5*10° для первого варианта и 33*10° для второго варианта. В обоих случаях действительные ошибки гораздо меньше максимально возможных. Максимально возможная ошибка могла бы получиться, например, если бы при округлении каждой частичной суммы пришлось бы отбрасывать величи­ну, близкую к половине единицы младшего разряда, но так случается очень редко.

З аметим также, что если не суммировать два наимень­ших числа, а суммировать только восемь больших чисел, то сумма, вычисленная от меньших чисел к большим, слег­ка изменяется и становится равной 0.7522*104, в то время как сумма, вычисленная от больших чисел к меньшим, остается неизменной и равной 0.7520*104. Дело в том, что во втором варианте оба последних числа слишком малы для того, чтобы повлиять на последнюю значащую цифру суммы, если их прибавлять по одному. В первом же вариан­те эти числа складываются в самом начале и их сумма уже достаточно велика, чтобы изменить последнюю значащую цифру окончательной суммы.

Пример 2

Сложение почти равных положительных чисел. Предпо­ложим, что мы снова складываем четыре положительных числа, но на этот раз они почти равны одно другому. Можно написать

xi = x0 + i , i = 1 , 2 , 3 , 4 ,

где

|i| << x0.

(Символ «<<» означает «много меньше».) Применяя выведен­ную в предыдущем примере формулу для ошибки округле­ния для сложения четырех чисел, имеем

|ey|  ( 9x0 + 3|1| + 3|2| + 2|3| + |4| ) * 5*10-t.

Так как |i| малы по сравнению с x0, то приблизительно можно написать |ey|  4.5*10-t+1*x0.

Таков будет верхний предел для ошибки округления, если сложение ведется согласно графу, изображенному на рис. 2.3. Рассмотрим другой путь вычисления той же суммы, согласно графу, изображенному на рис. 2.4. Здесь y = ( x1 + x2 ) + ( x3 + x4 ), и операции в скобках

Р и с. 2.4. Другой вид графа для сложения четырех чисел.

Порядок сложения определяется числами, поставленными рядом с кружками сложения.

необходимо выполнить вначале. Если обозначить ошибки округления через r1 , r2 и r3 соответственно порядку выпол­нения операций сложения, то получим

Преобразуя последнюю формулу, получаем

|ey|(2x1+2x2+2x3+2x4)*5*10-t.

Подставляя xi = x0 + i и пренебрегая | i | по сравнению с x0 , окончательно имеем

| ey |  4*10-t+1*x0.

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

В общем случае если имеется п2 положительных чисел приблизительно одинаковой величины, то общая ошибка округления уменьшается, если числа сложить сначала груп­пами по п чисел, а потом сложить п частичных сумм. Для больших п верхний предел ошибки округления при таком способе составляет всего 1/n от соответствующего предела при сложении чисел друг за другом (см. рис. 2.3).

Рассмотрим численный пример. Требуется сложить четы­ре числа:

x1 = 0.5243*100

x2= 0.5262*100

= 0.5226*100

x4= 0.5278*100

Можно положить x0 = 0. 5200; вычисления по-прежнему производятся с четырьмя значащими цифрами. Складывая числа одно за другим и округляя, получаем у = 0.2102*101. С другой стороны, вычисляя x1 + x2 = 0.1051*101 и x3 + x4 = 0.1050*101 , получаем у = 0.2101*101. Точное значение суммы равно 0.21009*101.

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

Пример 3

Вычитание двух почти равных чисел. Предположим, что необходимо вычислить z = x - y. Тогда

из формулы для распространения ошибки при вычитании имеем

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

Если разность х - у мала, то относительная ошибка z может стать большой, даже если абсолютная ошибка мала. Так как в дальнейших вычислениях эта большая относительная ошибка будет распространяться, то она может поставить под сомнение точность окончательного результата вычисле­ний. Рассмотрим простой пример:

x = 0.5628*104

y = 0.5631*104

Тогда

z = - 0.0003*104

Зная x и y , мы можем написать

К ак видим, относительные ошибки х и у малы. Однако

Эта относительная ошибка очень велика, и, что важнее всего, она будет распространяться в ходе последующих вычислений. Если, например, следующей операцией будет умножение полученной разности на 0.7259*104, то резуль­тат составит 0.2178*105 этот результат имеет четыре деся­тичные значащие цифры, и неискушенный программист может счесть этот результат точным до 4-го знака, хотя в нем можно доверять не более чем одному знаку.

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