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

8.5. Округление чисел в эвм

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

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

Таким образом, причинами погрешностей вычислений в ЭВМ мо­гут быть:

1) неточное задание исходных данных, участвующих в выполнении операции (либо из-за ограничений разрядной сетки машины, либо из-за погрешностей перевода информации из одной системы счисления в другую);

2) использование приближенных методов вычислений, что само по себе дает методическую погрешность (например, использование метода прямоугольников, трапеций при интегрировании);

3) округление результатов элементарных операций, что в свою очередь может привести к появлению накопленных погрешностей;

4) сбои в работе ЭВМ, что может быть устранено введением системы контроля выполнения операций.

Округление чисел в прямом коде

Если предположить, что исходная информация не содержит никаких ошибок и все вычислительные процессы выполняются абсолютно точ­но, то всегда существует третий тип ошибок — ошибки округления, которые возникают при переводе чисел из одной системы счисления в другую и последующем представлении их в разрядной сетке машины, а также при получении внутри машины чисел, разрядностью большей, чем это допустимо, например, при умножении. В этом случае число А округляют, т. е. заменяют его машинным числом [А] заданной раз­рядности. Округление (обозначим его знаком ) называется опти­мальным [38], если для любого машинного числа [А] справедливо A= [А]. Пусть [А]1 и [A]2— два последовательных машинных числа, тогда при оптимальном округлении вещественное число А такое, что [А]1 < A < [A]2 заменяется либо числом [А]1 либо числом

[А]2 Если A  A, то говорят об округлении по недостатку, если A  A, то говорят об округлении по избытку. Округление называ­ют симметричным, когда A = — (—A). Различают три вида симметричного округления.

1.Округление в направлении к нулю, когда вещественное число округляется до ближайшего к нулю машинного числа.

2.Округление в направлении от нуля, когда округление произво­дится до машинного числа, лежащего дальше от нуля, чем веществен­ное число A.

3.Округление по дополнению, когда округление производится до ближайшего машинного числа.

В качестве параметров, по которым будут сравниваться способы округления, целесообразно использовать максимальную величину модуля погрешности, т. е. max, где  = A— [A], и математическое ожидание погрешности округления .

Округление к нулю или усечение. Для конкретности считаем, что числа в машине представлены в прямом коде с запятой, фиксированной перед старшим разрядом, т. е. [А] = a-1...a-n. Пусть в результате каких-либо действий над машинными числами внутри машины сформи­ровалось число [А]', имеющее k = п + і разрядов. Очевидно, что самый простой способ округления состоит в отбрасывании хвоста числа [А]', который состоит из лишних разрядов, т. е. разрядов с но­мерами a-n-1, a-n-2,...,a-n-t Тогда величина абсолютной погреш­ности приближения есть

Очевидно, что при усечении mах = р-n (1 —р-t). Если считать, что появление чисел с абсолютной величиной А, но разных знаков равновероятно и равновероятны все значения хвоста чисел одного знака, то математическое ожидание погрешности в данном случае равно нулю, т. е. = 0.

Обычно вероятность появления чисел разного знака при выполне­нии определенной программы не одинакова, поэтому представляет интерес округление абсолютных величин, т. е. фактически чисел одно­го знака. При этом значение mах останется прежним, но математиче­ское ожидание будет отлично от нуля и определится как

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

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

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

Округление по недостатку. Реализация данного способа базиру­ется на анализе знака округленного числа. Если [А]' > 0, то округ­ление заключается в отбрасывании хвоста. Если же [А]' < 0, то хвост также отбрасывается, а к величине оставшейся части добавляется еди­ница в младший разряд, если хвост не равен нулю. Таким образом, • реализация данного способа еще более усложнена по сравнению со способом округления от нуля за счет анализа знака числа [А]', хотя величина max осталась при этом прежней.

Если рассматривать округление чисел только одного знака, то при А' > 0 данный способ совпадает с усечением, а при А' < 0 — с округлением от нуля. Отсюда ясно, что он не может конкурировать с усечением результатов.

Округление по избытку. Этот способ во всем подобен предыдущему, с тем отличием, что добавление единицы в младший разряд сохраняемой части числа производится, когда оно больше нуля и хвост не равен нулю. При А' < 0 хвост просто отбрасывается. Характеристики данного способа точно такие же, как у предыдущего, за исключением знака величины А, который меняется на противоположный.

Округление по дополнению. Данный способ представляет собой объединение способов округления от нуля и к нулю. Его реализация связана с коррекцией сохраняемой части числа А', которая произво­дится по результатам анализа значения старшей цифры отсекаемой части a -n-1 т. е. цифры дополнительного (n + 1)-го разряда (ДР). В этом случае округленное число [A]' будет иметь значение

где

Когда а = 0, происходит округление к нулю, в противном слу­чае— от нуля. Значение максимума погрешности при этом составляет

Пример. Заданы A=0,11011111; B=0,10101101. Округлить A и B до n=6.

 A=0,110111  B=0,101011

+1 +1

0,111000 0,101011.

В случае равновероятного появления чисел разных знаков и равномер­ного распределения вероятностей появления различных значений хвоста числа математическое ожидание погрешности округления рав­но нулю. Однако при округлении чисел одного знака значение А отлично от нуля. Поэтому при округлении чисел одного знака данный

способ дает систематические ошибки округления, хотя и меньшие, чем при усечении.

По своим характеристикам способ округления по дополнению луч­ше, чем усечение. Систематические ошибки при округлении чисел одного знака обусловлены в данном случае тем, что округление осо­бенно неточно производится, когда значение отсекаемой части близко к половине единицы младшего сохраняемого разряда. Этот недоста­ток устраняется в следующем способе округления.

Усовершенствованное округление по дополнению. В этом случае решение о коррекции сохраняемой части числа А' принимается на ос­нове анализа значения всех разрядов его отсекаемой части А0 = а-n-1...а -n-t а не только старшего. Пусть для четного а n  = 0, иначе  = 1. Тогда параметр а в выражении (3.25) определится по следующим правилам:

При этом величина mаx = 2-1 * р-n, т. е. остается прежней. Однако систематические ошибки сводятся к нулю, так как при одина­ковой вероятности появления четного и нечетного значения цифры младшего разряда сохраняемой части значения  = 0 и  = 1 равно­вероятны, т. е. = 0. Таким образом, усовершенствованный способ дает хорошее округление в случае чисел одного знака, однако это достигается за счет усложнения его реализации.

Упрощенное округление по дополнению. При реализации способов округления по дополнению из-за возникновения переносов при сумми­ровании сохраняемой части числа с единицей округления необходимо выполнить операцию сложения, что требует дополнительного времени, т. е. снижает реальное быстродействие ЭВМ и, кроме того, может по­влечь за собой переполнение разрядной сетки. Распространения пере­носов не будет, если при а-n == р-1 отменить коррекцию. Для p = 2 этот способ округления состоит в том, что младший разряд сохраняе­мой части числа принудительно устанавливается в единицу, если стар­ший разряд отбрасываемой части равен единице.

При этом если в неокругленном результате разряд а-n равен еди­нице, то он не изменяется при округлении, а максимальная погреш­ность при отбрасывании А0 для положительных и отрицательных чисел составляет соответственно max= ± p-n (1 — p-t ). Если в неокруг­ленном результате операции значение разряда а_п есть нуль, то уста­новка его в единицу вносит погрешность, максимальная величина ко­торой может достигать соответственно mах = ½ p-n (1 — p-t).

Таким образом, при равновероятном появлении нуля и единицы в младшем разряде сохраняемой части для знакопеременных чисел снова получим симметричное распределение погрешностей с = 0. Однако в общем случае для чисел одного знака  0. Математическое ожидание будет в этом случае равно нулю только при t = 1, т. е. когда длина отсекаемой части составляет один двоичный разряд. Только в этом, важном для практики случае, округление происходит правильно, без накопления систематических ошибок.

Вероятностное округление. Для такого округления необходимо иметь датчик случайных величин (0 или 1), единица с выхода которого прибавляется к младшему разряду сохраняемой части числа. Погреш­ность округления при равновероятном распределении значений от­брасываемой части является случайной величиной с нулевым матема­тическим ожиданием.

Таким образом, самым простым способом округления является усе­чение, при котором не требуется дополнительных затрат времени и оборудования. Однако на практике важнее всего точность вычисле­ний, которая определяется величиной max . Только для трех спосо­бов округления по дополнению максимальная ошибка близка к поло­вине единицы младшего разряда машинного числа, т. е. является наименьшей. Наиболее быстродействующим из них является упрощен­ный способ, а наиболее точным — усовершенствованный. Поэтому предпочтение тому или другому способу округления следует отдавать только после анализа требований, предъявляемых к быстродействию и погрешности вычислений конкретной машины. Будем в дальнейшем пользоваться способом округления по дополнению.

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

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

Обратный код. При округлении по дополнению всегда округля­ется абсолютная величина, вследствие этого из дополнительного раз­ряда (ДР) отрицательной дроби необходимо вычесть единицу, т. е. прибавить к округляемой дроби обратный код —1окр = 1,11... 10, где цифра 0 записана в ДР. Цепочка циклического переноса должна при этом охватывать и этот ДР.

Пример. Задано: А = —0,101101; n= 4; t= 2; [A]0 = 1,010010.

Округление абсолютной величины:

Непосредственное округление обратного кода дает:

Добавлять код 1, 11... 1.0 и перестраивать цепочку циклического переноса для охвата ДР, т. е. (п + 1)-го разряда сумматора, весьма неудобно. Поэтому отрицательные дроби обычно округляются после их перевода из обратного в прямой код.

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

Пример. Заданы A =-0,1010001; B =-0,1010100; n=4; t=3

[A]д = 1,0101111; [B]д= 1,0101100

Округление абсолютных величин:

Непосредственное округление дополнительніх кодов чисел A и B.

т.е.

Таким образом, округление отрицательных дробей, заданных в допол­нительном коде, производится проще, чем в случае обратного кода.

Погрешности выполнения арифметических операций

Значащими цифрами числа называются все его цифры, кроме ну­лей, стоящих левее первой отличной от нуля цифры. Нули в конце числа — всегда значащие цифры. Цифра аi приближенного числа А называется верной, если выполняется неравенство

т. е. если абсолютная величина разности между точным числом А и его приближенным значением не превосходит половины единицы разряда, в котором стоит аi. Или

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

Результат операций алгебраического сложения этих чисел будет иметь вид

т.е.

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

При выполнении операций умножения получим

Так как произведение [А] [В] — величина второго порядка ма­лости, то ею можно пренебречь;

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

При выполнении операции деления получим

Второй сомножитель в правой части уравнения разложим в ряд. После преобразований получим

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

Отсюда абсолютная погрешность частного

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

при умножении

при делении

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

При возведении числа A в степень имеем

Тогда

Таким образом, при возведении в степень т приближенного числа [A] относительная погрешность результата увеличивается в т раз.

При вычислении получим

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

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

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

3. При возведении приближенного числа в квадрат или куб в ре­зультате необходимо сохранить столько значащих цифр, сколько их в основании степени.

4. При извлечении квадратного и кубического корней из прибли­женного числа в результате следует сохранить столько значащих

I цифр, сколько их в подкоренном числе.

5. При вычислении промежуточных результатов следует сохранить на один разряд больше, чем рекомендуют правила 1—4. В окончательном результате этот дополнительный разряд отбрасывается.

6. Если некоторые данные имеют больше знаков (при сложении —вычитании) или больше значащих цифр (при других действиях), чем I другие, то их следует предварительно округлять, сохраняя лишь одну

запасную цифру.

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

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