AOP_Tom2 (1021737), страница 75
Текст из файла (страница 75)
Дополнительная информация, которую предоставляет арифметика ненормализованных величин, часто может быть более важна, чем информация, потерянная при выполнении обширных вычислений в таком формате, но, как обычно, необходимо соблюдать осторожность при ее использовании. Примеры правильного использования арифметики ненормализованных величин проанализированы Р, Л. Эшенхерстом (Н.? . АвЬепЬцгэг) и Н. Метрополисом (Х.
Меггоро11э) в сборнике Согпригегв и Сошриг1пВ, АММ, 8!ацВЬг Мепюба1 Рарегэ 10 (ГеЬгцагу, 1965), 47 — 59, Н. Метрополисом в журнале Хитег. Май. 7 (1965), 104- 112, и Р. Л. Эшенхерстом в сборнике Еггог ш И81гв1 Сошригабоп 2, ег111ед Ьу 1,. В. Ка!1 (Хек Ъог1с Ч'11еу, 1965), 3-.37. Надлежащие методы вычисления стандартных математических функций с представлением как входных, так и выходных данных в ненормализованной форме были описаны Р.
Л, Эшенхерстом в 1АСМ 11 (1964), 168 — 187. Расширение ненормализованной арифметики, которое предусматривает сохранение информации о том, что определенные операнды известны гпо ~но, проанализировано Н. Метрополисом в 1ЕЕЕ Тгапк, С-22 (1973), 573 -576. С. Арифметика интервалов. Другой подход к проблеме оценки погрешности связан с так называемой арифметикой интервалов или диапазонов, которая предусматривает учет в процессе выполнения вычислений строгих границ — -верхней и нижней — -для каждого числа. Так, например, если известно, .что ип < и < п1 и по < и < пы в записи в форме интервшюв это будет иметь вид и = [ив, и1], и = [ов .. п1]. Сумма в 9 и есть [ив Чу пв .. иг й п1], где 17 означает нижнюю сумму в формате с плавающей точкой, т.
е. наибольшее представимое в данном формате число, меньшее или равное действительному значению суммы, а вт определяется аналогично (см. упр, 4.2.1 — 13). Далее, и З и = [ио ~гп ..вг Й по]; если ио и во положительны, то и З и = [ив '~г пп, и~ в1 п1], и О и = [иа чг п1 .. и1 ат ио]. Например, число Авогадро и постоянная Планка в обозначениях арифметики интервалов будут иметь такой вид: Лт = [(24, +.6022133Ц .,(24, +.60221403Я, й = [(-26, +.66260715)..(-26, +.66260795)]. Сумма и произведение этих величин будут выражены следующим образом: Аг ш 5 = [(24, +.60221331) .. (24, +.60221404)], Аг З 5 = [( — 2, +.39903084)..( — 2, +.39903181)]. Если попытаться выполнить деление на 1ве ..
ег], причем ве ( 0 < еы весьма вероятно возникновение деления на нуль. Поскольку самой философией арифметики интервалов предусматривается строгая оценка ошибки вычислений, в этом случае обязательно должно формироваться сообщение об ошибке деления на нуль. Однако переполнение и потеря значимости не рассматриваются как фатальные ошибки, если поддерживаются специальные соглашения, которые более подробно рассматриваются в упр. 24.
Вычисления с использованием арифметики интервалов лишь вдвое больше по объему, чем те же вычислении в обычном формате. В то же время данный метод обеспечивает надежную оценку ошибки. Учитывая сложность математического анализа ошибок, такую цену можно признать вполне приемлемой. Поскольку в процессе вычислений промежуточные значения часто зависят одно от другого, полученные с помощью арифметики интервалов оценки результатов часто слишком пессимистичны; если вы собираетесь использовать ее, измените итерационные численные методы решения привычных задач.
Хотя перспективы эффективного использования арифметики интервалов выглядят довольно хорошо, нужно приложить определенные усилия, направленные иа расширение ее функциональных возможностей и, насколько это возможно, обеспечение "дружественности" по отношению к пользователю.
О. История и библиография. В классическом трактате о методах вычислений в десятичной системе счисления Ьесопз д'Аг!!Ьшег!9пе (РаНз: Со!!п, 1894), принадлежащем перу Жюпя Таннери (Лц!ез Таппегу), утверждается, что положительные числа должны округляться в сторону большего, если первый отбрасываемый разряд равен или больше 5.
Поскольку ровно половина десятичных цифр равна илн больше 5, это, как ему казалось, будет приводить к округлению в большую сторону в среднем ровно в половине случаев, так что в результате ошибки (округления.— Прим. ред.) компенсируются. Идея округлять до четного в неоднозначных случаях впервые, кажется, была упомянута Джеймсом Б. Скарборо (Яашез В. 8сагЬогоп8!з) в первом издании его пионерской книги Хшпег!са! МагЛешабса! Апа!уз!з (Ва!гппоге: ЗоЬпз НорЫпз Ргезз, 1930), 2; во втором издании (1950 г.) он развил ранние примечания по этому поводу, утверждая, что "для любого думающего человека должно быть очевидным, что, когда отбрасываетгя 5, предыдущий разряд должен быть увеличен на 1 только в половине случаев"'; как средство достижения этого он рекомендовал округлить до четного. Впервые анализ арифметических операций в формате с плавающей точкой был выполнен Ф.
лЬ Бауэром (Г. Ь. Ванег) и К. Замельсоном (К. 8аше!зоп), Хе7гзсЬг!Гс Яг алкея.апг!ге Ма!Ь. ппд РЬуэ!!г 4 (1953), 312-316. Следующая публикация появилась лишь пятью годами позже: Л. %. Сагг П1, САСМ 2, 5 (Мау, 1959), 10 — 15. (См, также Р. С. Г1зсЬег, Ргос. АСМ Хац Меебпй 13 (1958), Рарег 39.) В книге Л. Н. Ж|!Ыпзоп, Ноипойп8 Еггогз !и А!деЬга!с Ргоселэел (Епк)еиоос$ С11!Ь: Ргепбсе-На!1, 1963) показано, как применять методы анализа ошибок отдельных арифметических операций к анализу ошибок в задачах с большим числом вычислений (см.
также его монографию ТЬе А!яеЬгшс Е!8епга!ие Рго!з!еш (ОхЕогд: С1агепбоп Ргезз, 1965)). Обзор других ранних работ, касающихся точности вычислений в формате с плавающей точкой, приведен в двух важных статьях, которые можно настоятельно рекомендовать для дальнейшей проработки; Ж. М.
КаЬап, Ргос. 7Р1Р Сопйтезз (1971), 2, 1214 — 1239, и Н. Р. Вгепг, 1ЕЕЕ Тгапе. С-22 (1973), 601 — 607. В обеих статьях содержатся весьма полезная теоретическая часть и демонстрация ее приложения на практике. Введенные в этом разделе отношения ~,, мэ»в имеют аналогию с идеями, сформтлированным в работе А. Уап 1»!»!)пйааг»!еп, В1Т 6 (1966), 66 — 81. Приведенные выше теоремы А и В навеяны некоторыми работами в этой области Оле Меллера (О!е Ма!!ег), ВГГ б (1965), 37-50, 251-255.
Теорема С взята из работы Т. 1. ОеЫсег, Ушпег. 51авЫ 18 (1971), 224 — 242. Расширение и уточнение всех трех тепрел» опубликовано в работе 8. Ыппа!пгпаа, ВХТ 14 (1974), 167-202. У. М. Кахан (%. М. КаЬап) сформулировал теорему Р в неопубликованных заметках; полное ее доказательство и комментарии приведены н работе 1. Р. Ке»вег, П. Е. Кпп»Ь, 1»»Г. Ргос. Ее»сетя 3 (1975), 84-87, 164. Использовать арифметику ненормализованных чисел с плавающей точкой рекомендовали Ф. Л.
Бауэр и К. Замельзон в упомянутой выше статье; независимо ее испольэовал Дж. В. Карр (1. 1»»Г. Сагг П1) из Мичиганского университета (1953 г.). Несколькими годами позже был спроектирован ко, пьютер !»4А1»!АС 1П с аппаратной реализацией арифметики обоих типов (см. К. Ь.
АвЬепЬнгя! и Х. Метгоро)!я, ,1АСМ 6 (1959), 415 — 428, 1ЕЕЕ Тгапа ЕС-12 (1963), 896 — 901; К. Ь. АяЬепЬпгяц Ргос. Врг!»»8 3о!г»г Сотри!ег СопГ. 21 (1962), 195 — 202). Среди других других ранних работ, касающихся ненормализованной арифметики, нужно также упомянуть статьи Н. 1.. Огау, С.
НагПвоп, 1г., Ргос.. Еавсегп,!ошг Сотри!ег СопГ, 16 (1959), 244 — 248, и %'. С. %а»!еу, лАСМ 7 (1960), 129--139. О ранних исследованиях в области арифметики интервалов речь идет в работах А. С!ЬЬ, САСМ 4 (1961), 319-320; В. А. СЬа»чгея, лАСМ 13 (1966), 386-403, и книге 1пгеюа! Апа!угбв Ьу Капюп Е. Мооге (Ргепбсе-На!1, 1966). Последующий "расцвет" в этой области приводится в более поздней книге Мура (Мооге) 5»Хег!»ос!в ап»! АррйсаВопя оГ1пс»»гъа! Апа!увбв (81АМ, 1979).
Расширение языка Рааса!, допускающее испо»»ьзова»»ие переменных наподобие л!»»»егта!", разработано в Университете Карлсруэ в начале 80-х годов. Описание этого языка, который включает и множество других функций, ориентированных на научные расчеты, приведено в работе Равса1-ВС (Аса»!еш!с Ргевя, 1987); авторы — Бохлендер (ВоЫеп»!ег), Ульрих (()!!г!сЬ), Вольф фон Гуденберг (%о!!Г тбп СпбепЬег8) и Ролл (Ка!!). Книга Ь»!г1сЬ Кн!!яс!», Сгнг»»!!айеп»!ев питепясЬеп КесЬ»»епгв Ма!бел»аг!вс!»е Велгйп»!и»»8 с!ег КесЬпегапг!ипесГА (МаппЬецп: В!Ы. 1пясо 1976) полностью посвящена исследованию систем арифметики в формате с плавающей точкой.
(См. также статью Кулиша (Кн!!ясЬ) в журнале!ЕЕЕ Тгапв. С-26 (1977), 610-621, и его более позднюю работу в соавторстве с У. Л. Миранкером (Ъ'. Ь. Мйап!»ег), озаглавленную Соп»ригег Аг!г!»тес!с»п Тйеогу и Ргас!!се (Кеи Уог!»; Аса»!еш!с Ргеяв, 198Ц.) Прекрасный обзор наиболее свежих работ, касающихся анализа точности выполнения расчетов в формате с плавающей точкой, появился в книге ЬЬ Л. Н!8Ьаш, Ассшасу и В!аЫ!Ву оГ»Уитег!са! А!8оп»Лтв (Р!»!!ас(е1рЬ|а: 8!АМ, 1996). УПРАЖНЕНИЯ Замечав»»с.
Если не оговорено противное, предполагаются действия над нормализованными числами в формате с плавающей точкой, 1. (М!8) Докажите, что тождество (7) следует из соотношений (2)-(б). 2. [М20] Используя тождества (2)-(8), докажите, что (и Ю х) Ю (е Ю р) > и З е, каковы бы ни были х > 0 и р > О. 3. [М20] Найдите восьмирвзрядные десятичные числа с плавающей точкой и, е и «е, для которых и З (е З «е) ~ (и З е) З «е, причем ни при одном из этих вычислений не происходит ии переполнения, ни исчезновения порядка.
4. [10) Можно ли найти числа с плавающей точкой и, е и «е, для которых при вычислении и З (е З ю) происходило бы исчезновение порядка, а при вычислении (и З е) З «е ие происходило? б. [М20] Выполняется ли для всех чисел с плавающей точкой и и е ф 0 равенство иЗе = и З (1 З е) таким образом, чта не возникает ни переполнения, ни исчезновения порядка? 6. [М22] Для каждого из следующих двух соотношений выясните, выполняется ли оно тождественно для всех чисел и в формате с плавающей точкой: (а) 0 З (О Ю и) = и; (Ь) 1 З (1 З и) = и. 7. [М21] Пусть иО« означает и Зи. Найдите такие бинарные числа с плавающей тачкой и и е, для которых (и З е)0«> 2(иО« + еО«). 8. [20] Пусть « = 0.0001; какое из соотношений и « е («), и е («), и М е («), и е («) выполняется для следующих пар восьмирвзридных десятичных чисел с плавающей точкой с избытком О? а) и = (1, +.31415927), е = (1, +.31416000); Ъ) и = (О, +.99997000), е = (1, +.10000039); с) и = (24, +.60221400), е = (27, +.00060221); й) и = (24,-~-.60221400), е = (31, +.00000006); е) и = (24, +.60221400), е = (28, +.00000000).