AOP_Tom2 (1021737), страница 70
Текст из файла (страница 70)
до н. э, или ранее), которые применяли арифметические операции над числами с ллаваюп!ей точкой по основанию 60, но не имели обозначения для порядка. Нужный порядок всегда некоторым образом "подразумевался" тем, кто производил вычисления. По крайней мере в одном случае обнаружено, что у вавилонян получился ошибочный ответ, потому что сложение осуществлялось при неверно выполненном выравнивании операндов, однако это случалось весьма редко (см. О, Менйе!эанег, ТЬе с'хас1 Яаепсеэ ?л АлВйийу (РПпсе!оп, Х. 3с РПпсегоп Бп!чегэ!гу Ргеээ, 1952), 26 — 27). Другой пример раннего обращения к формату с плавающей точкой связан с именем греческого математика Аполлония (3 в.
до н. э.), который, по-видимому, был первым, кто объяснил, как можно упростить умножение, по крайней мере в простых случаях, собирая степени 10 отдельно от нх коэффициентов. Метод Аполлония обсуждается в труде Папла Александрийского "Математическое собрание" (4 в.
н. э.). После гибели вавилонской цивилизации представление с плавающей точкой существенным образом использовалось для формирования произведений и частных лишь много веков спустя, когда были открыты логарифмы (1600 г.) и вскоре после этого Отред (ОнЕЬсгеб) изобрел логарифмическую линейку (1630 г.). Примерно в тот же период было введено современное обозначение "х"" для порядков; отдельные символы для квадрата х, куба х и т.
д. -использовались и раньше. Арифметика с ллаваклцей точкой была включена в конструкцию некоторых из самых ранних вычислительных машин. Это было независимо предложено Леонардо Торресом-и-Овьедо (? еолагдо Тогтеэ у Япечедо) в Мадриде (1914 г.), Конрадом Цузе (Копгад Енэе) в Берлине (1936 г.) и Джорджем Стибицем (Сеогбе БВЬВя) в Нью-Джерси (1939 г.). В машине Цузе использовалось двоичное представление с плавающей точкой, которое он назвал полулогарифмической нотацией; он также реализовал соглашение относительно операций с некоторыми особыми величинами, подобными "оо" и "не определено". Первой американской вычислительной машиной, в которой появились средства для выполнения операций в формате с плавающей точкой, была Модель Ч (Вей ЬаЬогагобеэ), за которой последовала гарвардская машина Марк ??.
Обе зти машины, спроектированные в 1944 году, были репейными вычислительными устройствами. [См. В. НапоеП, ТЬе Ог!8!пэ о! П!к!га! Сошрп!егз (Вег!ш; Брйпбег, 1973), 100, 155, 163-164, 259 — 260; Ргос. Бушр. Йагйе-Бса!е О!фЫ Са!си!а!!пи МасЫпегу (Нахгагс1, 1947), 41-68, 69 — 79; Юагашабоп 13 (Арй!, 1967), 35 — 44 (Мау, 1967), 45 — 49; Ее!К гйг алйеи . МагЛ. ипс( РЬуэ!)г 1 (1950), 345-346.] Использование двоичных чисел с плавающей точкой серьезно обсуждалось в 1944 — 1946 годах группой исследователей из Школы Мура (Мооге БсЬоо1) в связи с планами создания первой элекшрошюй вычислительной машины, но оказалось, что на лампах электронную схему, реализующую арифметику с плавающей точкой, выполнить гораздо труднее, чем на реле. Конструкторы первых электронных машин поняли, что масштабирование — это целая проблема в программировании, но они чувствовали, что это всего лишь небольшая часть общей работы по программированию в те годы, Конечно, масштабирование в явном виде чисел с фиксированной запятой казалось вполне окупающим затраченные время и усилия, поскольку программист при этом вынужден был все время держать вычисления в поле зрения и заботиться об их точности.
Далее конструкторы возражали, что при представлении чисел с плавающей точкой занимается ценное место в памяти, так как нужно хранить порядки. Кроме того, схемотехнические решения арифметики с плавающей точкой трудно приспособить к вычислениям с многократной точностью. [См. гоп Хешпапп'в Со!!ес!ед 11'ог)гэ 5 (!чеэг Уогй: Масгп1!!ап, 1963), 43, 73 — 74.] Конечно же, в это время они создавали машину, которая была первой машиной с хранимой в памяти программой н второй электронной машиной, и им предстояло выбрать формат либо с фиксированной, либо с плавающей точкой, но не оба сразу. Они предвосхитили составление программ двоичной арифметики с плавающей точкой, и команды "сдвиг влево" и "сдвиг вправо" фактически были введены в эти машины, главным образом, с целью повышения их эффективности.
Первой машиной, которая имела средства для выполнения арифметических операций с обоими форматами, была, по-видимому, ЭВМ, разработанная фирмой "Дженерал Электрик" [см. Ргос. 2лг( Бутр. Ьагбе-Бса!е П!8йа! Са!си!аНлй МасЛшегу (СашЬг168е, Маэвс Нагтагс( 1)п1хегэ11у Ргеээ, 1951), 65-69]. Подпрограммы для работы в формате с плавающей точкой, интерпретнрующие системы для ранних ЭВМ, были составлены Д. Дж. Уилером (П.
3. %Ьее!ег) и другими и впервые опубликованы в книге Ж!1)геэ, %Ьее!ег, О1!1, ТЬе Ргерагабоп оГ Ргодгатэ Рог ап Е!ес!гоп!с П!8!!а! Сотригег (Яеаббпй, Мавз.: АЫ1эоп-%еэ)еу, 1951) (см. подпрограммы А1 — А11). Интересно отметить, что в ней описаны программы для !!есяшичного представления с плавающей точкой, хотя использовалась двоичная ЭВМ; другими словами, числа представлялись в виде 10'7', а не 2'!, и поэтому для операций сдвига требовались умножения или деления на 10.
На этой машине десятичное масштабирование выполнялось почти так же просто, как сдвиг, а десятичное представление значительно упрощало ввод-вывод. Авторы большинства публикаций при описании деталей реализации подпрограмм арифметики ссылаются на технические отчеты многочисленных производителей компьютеров, но иногда встречаются ссылки на открытые источники. Помимо упомянутых выше работ, определенный исторический интерес представляют следующие: Н.
Н. Бгагк апб П. В. МасМВ1ап, Ма!Ь. Сошр. 5 (1951), 86 — 92, в которой описана программа, "прошитая" на специальной сменной панели; П. МсСгасйеп, ВдрСай Сотрийег РпзВтаттйп8 (Кеи Уог)с 1У11еу, 1957), 121 — 131; 3. %. Сагг 1П, САСМ 2, 5 (Мау, 1959), 10-15; %. С.
1чйадеул,рАСМ 7 (1960), 129-139; П. Е. КпийЬ, 14СМ 8 (1961), 119-128; О. Кеяпег, САСМ 5 (1962), 269-271; Г. Р. Вгоо)гя апй1 К. Е. 1тегяоп, Аийотадс Васа Ргосеясдп8 (Нещ Ъог)й: %11еу, 1963), 184-199. Дискуссия относительно арифметики с плавающей точкой с точки зрения разработчиков компьютеров представлена в работах Б. О. СашрЬе11, кГ1оайспВ рошс орегасюп" в Р1аппш8 а Сотрисег Буяйегп, едссед Ьу %, ВисЬЬо)х (Кещ Ъог)й: Мсбгале-П111, 1962), 92 — 121, А. Радебя, 1ВМ Буяйетя Х 7 (1968), 22-29. Дополнительный список источников, в основном, имеющих отношение к анализу точности вычислений в формате с плавающей точкой, представлен в разделе 4.2.2. Поистине революционные изменения в аппаратной реализации арифметики с плавающей точкой произошли, когда болыпинство изготовителей компьютеров приняли к исполнению стандарт А)л81/1ЕЕЕ Бйапдагд 754 в конце 80-х годов.
(См. 1ЕЕЕ М!сто 4 (1984), 86-100; %. 3. Соду, Сотр. БсЛ и БсаВяПся: Бутр. оп ййе 1пйег1асе 15 (1983), 133 — 139; 13й. М. КаЬап, Мтй/Мйсго Хеяй-ВЗ Сопб Кесогд (1983), Рарег 16й?1; П. Со1дЬег8, Согарисйп8 Биггеуя 23 (1991), 5 — 48, 413; 1Ъ'. 3. Соду апд 3. Т.
Соопеп, АСМ Тгапя. МайЛ. Бойшаге 19 (1993), 443 — 451.) Компьютер ММ1Х, который заменит МХХ в следующем издании данной книги, будет полностью соответствовать этому стандарту. УПРАЖНЕНИЯ 1. (10) Как будут выглядеть число Авогадро и постоянная Планка (3), если их представить в виде четырехразрядиых чисел с плавающей точкой пе основанию 100 с избытком оО? (Именно таким было бы представление в машине М13.
как в (4), если бы размер байта равнялся 100.) 2. (13) Предположим, порядок е находится в интервале 0 < е < Е. Каковы наибольшее и наименьшее положительные значения, которые могут быть зюгисаны как р-разрядные числа с плавающей точкой по основанию Ь с избытком д? Каковы наиболыиее и наименьшее положительные значения, которые могут быть представлены в виде таких нормализованных чисел? 3. (11] (К. Цузе (К. Еияе), 1936.) Покажите, что, работая с нормализованными двоичными числами с плавающей точкой, можно немного увеличить точность без увеличения объема используемой памяти: р-разрядную дробную часть можно представлять пра помощи всего лишь р — 1 разрядов машинного слова, если чуть-чуть уменьшить интервал значений порядка.
4. (16) Пусть Ь = 10, р = 8. Какой результат даст алгоритм А для операции (50, +.98765432)ш (49., +.33333333),для операции (53, †.99967654) б (54, +.10000000) и для операции (45, †.50000001) Ю (54, +.10000000)? 5. Щ Будем говорить,что х и (по отношению к данному основанию Ь), если х и и— действительные числа, удовлетворяющие следующим условиям: (х/Ь) = (у/Ь): дЬ=О е=ь ушодЬ=О, 0<хшодЬ< -'Ь е=л 0 <уплодЬ<15; хплодЬ = 1Ь йл=ь ушодЬ.= $Ь; -'Ь < х йпод Ь < Ь е=л 1Ь < и лпод Ь < Ь.
Докажите, что между шагами А5 и Аб алгоритма А можно, не изменяя результата, заменить у, на Ь г ~Р„, где Р„Ьг+~Д„. (Если Є— целое и Ь четно, эта операция, по сути, позволяет "урезать" ), до р + 2 разрядов, запоминая, был ли отброшен любой разряд, отличный от нуля. В результате может быть минимизирована длина регистра, необходимого для сложения на шаге Аб.) 6. [20] Если результат выполнения команды 2100 равен нулю, каким будет знак регистра гА (если следовать описанию олерацнй арифметического расширителя компьютера И11, представленному в этом разделе)? 7.