AOP_Tom2 (1021737), страница 71
Текст из файла (страница 71)
[27] Проанализируйте арифметические операции с плавающей точкой с использованием уравновешенной тернарной нотации. 6. [20] Приведите примеры нормализованных восьмиразрядных десятичных чисел с плавающей точкой и н с, для которых сложение влечет за собой (а) исчезновение порядка, (Ь) переполнение порядка, если подразумевать, что для порядков справедливо соотношение 0 < с < 100. 9. [М24] (У. М. Кахан (Ъ'. М. Кайап).) Предположим, что исчезновение порядка приводит к присвоению результату значения "нуль" без какой-либо индикации ошибки. Используя восьмиразрядные десятичные числа с плавающей точкой с избытком нуль н порядком е в интервале — 50 < е < 50, найдите такие положительные значения а, Ь, с, 0 и у, для которых выполняются соотношения (11). 10.
[12] Приведите пример нормализованных восьмиразрядных десятичных чисел с плавающей точкой и и о, в процессе сложения которых происходит переполнение при округлении. ° 11. [М20] Приведите пример нормализованных восьмиразрядных десятичных чисел с плавающей точкой я н с, в процессе умножения которых происходит переполнение при округлении. 12. [М25] Докажите, что переполнение при округлении не может происходить в ходе выполнения фазы нормализации при делении чисел с плавающей точкой. 13. [00] Имея дело с "арифметикой интервалов", нежелательно Ькруглять результаты вычислений в формате с плавающей точкой.
Скорее, было бы желательно реализовать операции, подобные 1Р и Й, которые дают наиболее близкое представление границ сумм: и 1Р о < и + с < и гв с. Как модифицировать алгоритмы, описанные в данном разделе, чтобы они подходили для этой цели? 14. [25] Напишите подпрограмму для И11, которая работала бы с произвольным исходным числом в регистре А, необязательно нормализованным, и преобразовывала бы его в ближайшее целое в формате с фиксированной точкой (или обнаруживала, что число слишком велико по абсолютной величине, чтобы было возможно такое преобразование).
ь 1$. [28] Разработайте подпрограмму для И11, которая по заданному числу в формате с плавающей точкой и вычисляет и Яю~~ 1, а именно и — [и], округленное до ближайшего числа в формате с плавающей точкой. Подпрограмма должна быть увязана с остальными подпрограммами этого раздела. Обратите внимание на то, что когда и — очень малое отрицательное число, и ( чм) 1 должно быть округлено таким образом, чтобы результат был равен единице (хотя и шод 1 по определению всегда должно давать результат, меньший единицы как действительного числа). 16. [НМ21] (Роберт Л.
Смит (КоЬегг Ь. БппйЬ).) Разработайте алгоритм для вычисления действительной и мнимой частей комплексного числа (а -Ь Ы)? (с+ ой) по заданным действительным числам в формате с плавающей точкой а, Ь, с и 0. Постарайтесь избежать яычисления с + И, поскольку это может привести к переполнению порядка даже тогда, когда [с[ или [2([ приблизительно равно квадратному корню максимально возможного числа в формате с плавающей точкой. 17. [40] (Джон Кок (Зо)2п Сос)се).) Реализуйте идею расширения диапазона представления чисел в формате с плавающей точкой, определив однословное представление, в котором точность дробной части уменьшается по мере того, как увеличивается значение абсолютной величины порядка.
15. [25) Представим себе двоичный компьютер с Зб-битовым форматом слова, в котором положительные двоичные числа в формате с плавающей точкой представлены в виде (Ое~ 22... ее?212...122)2; здесь (е2е2... еа)2 есть избыток (10000000)2 порядка и (1212 ° ° ~22)2 есть 2?-битовая дробная часть. Отрицательные числа в формате с плавающей точкой представлены двумя дополнениями соответствующих положительных представлений (см. раздел 4.1). Таким образом, 1.5 имеет вид 201[б00000000 в восьмеричных обозначениях, а -1.5 имеет вид 57б [200000000; восьмеричные представления 1.0 и -1.0 есть 201 [400000000 и 57б[400000000 соответственно.
(Вертикальные черточки использованы здесь для отображения границы в машинном слове между порядком и дробной частью ) Учтите, что бит 1'2 для нормализованного положительного числа всегда равен 1, н то время как для отрицательного он почти всегда равен нулю; исключениями являются представления чисел — 2". Предположим, что точный результат операции в формате с плавающей точкой имеет в восьмеричном представлении вид 572[740000000[01; эта отрицательная ЗЗ-битовая дробная часть должна быть нормализована н округлена до 2? бит.
Если сдвигать ее влево до тех пор, пока первый бит дробной части не станет равным нулю, получится 57б[000000000[20. Но это приведет к округлению до неправильного значения 575[000000000, в данном случае возникла кперенормализация", поскольку правильный результат — 575[400000000.
С другой стороны, если начать (в какой-нибудь другой задаче) со значения 572[740000000[05 и остановиться до возникновения перенормвлизацни, получится 575[400000000[50. Этот результат округляется до ненормализованного числа 575[400000001; последующая нормализация приведет к результату 575[000000002, в то время как верный результат— 57б[000000001.
Придумайте простое, но правильное правило округления, которое разрешит эту дилемму для такой машины (но принятый формат с двумя дополнительными представлениями должен остатьгл в неприкосновенности). 10. [24[ Каково время выполнения подпрограммы 2100 в программе А в терминах, отображающих характеристики исходных данных? Каково максимальное время выполнения для любых исходных данных, которые не приводят к переполнению или потере значимости порядка? ОЛРУГЛЕнньш ЧИСлд ВСЕГЛЛ ЛГУТ.
— СЭМЮЭЛЬ ДЖОНСОН (5АМ11ЕС ЗОНЫ5ОЫ) (1?50) Я буду говорить в окРугленных чиСлах, не абсолютно точно, но не настолько далеко от истины, чтобы изменить Реальный результат. — ТОМАС ДЖЕФФЕРСОН (ТНОМА5 ЗЕРРЕгс5ОЫ) (1824) 4.2.2. Точность арифметических операций с плавающей точкой Вычисления над числами в формате с плавающей точкой неточны по самой своей природа, и программисту нетрудно столь неудачно организовать их выполнение, что полученные результаты будут почти полностью состоять из "шума". Одна из главных проблем численного анализа состоит в анализе точности результатов тех или иных численных методов; сюда же относится и проблема "степени доверия": мы не знаем, насколько правильны результаты вычислений на компьютере.
Пользователи-новички решают эту проблему, доверяя компьютеру, как непогрешимому авторитету; они склонны считать, что все цифры напечатанного ответа являютси значащими. У пользователей, лишонных этих иллюзий, подход прямо противоположный: они неизменно опасаются, что полученные результаты весьма далеки от истинных. Многие из серьезных математиков пытались строго проанализировать последовательность операций с плавающей точкой, но, обнаружив, что задача слишком сложна, удовлетворялись правдоподобными рассуждениями. Полное исследование методов анализа ошибок выходит, разумеется, за рамки настоящей книги, однако некоторые из характеристик ошибок, возникающих при вычислениях в формате с плавающей точкой, мы здесь все-таки рассмотрим.
Наша цель — выяснить, как выполнять операции с плавающей точкой таким образом, чтобы, сохраняя достаточно высокий уровень достоверности, упростить, насколько это возможно, анализ распространения ошибки. Грубый (но зачастую вполне приемлемый) способ, с помощью которого можно охарактеризовать выполнение операций арифметики с плавающей точкой, основан на понятии значащих разрядов или относиэпельной ошибки. Если точное вещественное число х в компьютере представляется посредством приближения х = х(1+ е), то величина т = (х — х)/х называется относительной ошибкой приближения.
Грубо говоря, при выполнении вычислений в формате с плавающей точкой операции умножения и деления не слишком увеличивают относительную ошибку, но вычитание почти равных величин (и сложение и Ь с, где и почти равно — в) может увеличить ее значительно. Итак, общее эмпирическое правило таково: существенной потери точности можно ожидать от сложения и вычитания указанного вида, но не от умножения и деления.