- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
1. Введение
Место и роль Арифметики цифровых вычислительных машин в современной науке
Фундаментальная наука включает научные знания о Мире окружающем Человека, о самом Человеке и обо всем, что создано Человеком. Предметом Фундаментальной науки является, в том числе, Чистая математика.
Прикладная наука описывает научные знания о том, как применить фундаментальные научные знания для решения практических, т.е. прикладных, задач стоящих перед Человечеством. Соответственно Прикладная математика описывает совокупность теорий, методов, алгоритмов, методик и способов применения Чистой математики для решения прикладных задач.
До создания ЭВМ Прикладная математика развивалась, ориентируясь на выполнение вычислений вручную или с помощью простых приспособлений и устройств, таких как таблицы, графики, счеты, логарифмическая линейка, арифмометры и механические счетно-решающие устройства. Толчком для бурного развития Прикладной математики послужило создание первых электронных программируемых ЭВМ. Появилась возможность выполнять столь сложные и громоздкие вычисления, которые не могли выполнить никакие реальные коллективы счетно-решающих работников за приемлемые интервалы времени. Потребность в подобных вычислениях испытывали, прежде всего, научные работники и высококвалифицированные инженеры, занятые развитием прикладной физики и созданием новой техники, в том числе ЭВМ. Именно этим специалистам стали доступны первые ЭВМ.
Прикладная математика развивается по многим направлениям и включает в себя множество разделов. В их числе Вычислительная математика и Арифметика ЭВМ. Эти два раздела связаны друг с другом.
Арифметика возникла многие тысячелетия назад, быть может, когда человек учился считать на пальцах – один, два, три, много, и стала чем-то привычным и само собой разумеющимся. Многим казалось, что в этой науке все дорожки уже протоптаны. Ее даже серьезной наукой считать перестали. Довольно подробно и интересно история Арифметики со времен Вавилона описана во втором русском издании трехтомника Д.Э. Кнута “Искусство программирования” в начале главы 4 “Арифметика”.
Создатели первых ЭВМ столкнулись с особенностями представления чисел и выполнения арифметических операций в аппаратуре. Старая Арифметика их не устраивала, и пошел творческий процесс создания Новой Арифметики. Оказалось, что возможности для поиска решений в этой области знаний неисчерпаемо велики. За работу взялись конструкторы ЭВМ и математики Прикладники. Сложилось новое научное направление Машинная арифметика.
В Машинной арифметике, закладываемой в конкретные ЭВМ, наступил полный хаос. Каждый конструктор стремился вложить в свою Машину что-нибудь новенькое и лучшее и упорно отстаивал свои предложения. Как следствие этому оказалось, что одни и те же вычисления при одних и тех же исходных данных выполненные на ЭВМ разного типа приводят порой к совершенно разным результатам. Какой же из них правильный, и есть ли среди них правильный? Какова достоверность информации выдаваемой ЭВМ?
Результат выполнения программы зависит не только от метода Вычислительной математики положенного в ее основу, а и от того, какой Арифметикой владеет ЭВМ, на которой выполнялась программа. Поэтому результаты выполнения одной и той же программы на ЭВМ разного типа, использующих разную Арифметику, могут очень сильно отличаться и быть весьма далекими от правильного.
В Чистой математике крестикам (+ ×) и черточкам (– /) приводят в соответствие вполне определенные операции сложения, умножения, вычитания и деления и все интерпретируют их совершенно одинаково, считая, что операции выполняются абсолютно точно и значения любых выражений в земных условиях и в любой другой звездной системе всегда совпадают. Только воспользоваться ее достижениями в интересах практики весьма сложно. Рассмотрим пример.
Шеф показал на медный круг и сказал:
– “Мне нужно знать его площадь с погрешностью не более 0,2%. Измерь диаметр и посчитай”.
Я взял метровую линейку и стал измерять диаметр. Получилось толи 903, толи 904 мм.
Чистая математика определяет площадь круга
(1-01)
и делает это очень точно. Я стал считать.
Вычислил радиус. Получил 903/2=451,5 мм.
На всякий случай 904/2=452 мм.
Вычислил квадрат радиуса:
451,52=203852,25 мм2 или 4522=204304 мм2.
Больно уж много цифр. Ну и что, решил я. Я ведь вычислил точно.
Умножаю на . Но число имеет бесконечно много цифр. Моей жизни не хватит, чтобы их все записать. Как быть? Округлить, как меня учили в школе. А сколько взять цифр? Одну, две или больше? По какому правилу округлить? Не знаю. Но поскольку 451,52 имеет 8 цифр, возьму я в тоже 8 цифр и округлю до ближайшего числа (так точнее). Тогда .1
Умножаю и получаю:
мм2;
мм2.
Больно много цифр, и только две первые совпадают. Как быть? Возьму я их полусумму, и поскольку Шеф хочет получить площадь круга с погрешностью не более 0,2%, округлю до 4 разрядов, поточнее. Посчитал:
.
Округлил до 4 разрядов, получил: S=641100 мм2, и с этим пошел к Шефу.2
Шеф спросил:
– “Как ты считал?”.
Я рассказал, он выслушал и предложил мне написать Заявление об увольнении по собственному желанию.
“За что так?”, – спросил я.
“За безграмотность”, – ответил шеф.
Я взмолился. Шеф пожалел и сказал:
– “Тогда освой теорию и практику измерений, вычислительную математику и научись вычислять на ЭВМ. Запомни, за достоверность результатов вычислений отвечаешь ты, а не ЭВМ. ЭВМ железка, с нее не спросишь”.
Потом я понял, что вначале следовало определить способ вычисления результата и предельно допустимые погрешности исходных данных (в примере: диаметр и ), чтобы можно было вычислить результат с заданной предельно допустимой погрешностью. Затем выбрать инструмент требуемого класса точности для измерения диаметра круга. Так как круг не круг, его только хотели изготовить кругом, и его окружность не окружность, а сложная замкнутая кривая, то измерение диаметра следует выполнить в нескольких разных местах и усреднить. В скольких местах, и в каких местах, на эти вопросы ищи ответы в Теории измерений. Там же прописано, что линейные размеры деталей должны быть даны при температуре 20оС, а я измерял при +30оС да еще на солнышке. А если бы я измерял зимой, да при -40оС? Следовательно, необходимо измерять не только диаметр, а и температуру. С какой точностью, каким прибором, в каких точках, какова должна быть точность коэффициента температурного расширения меди? А если это сплав? Это ведь я решил, что он медный.
Формула (1-01) незаметно обрастает другими. Исходных данных не два, а много. Они приближенные действительные числа.
Для вычисления S можно написать разные программы, вычисляющие в разной последовательности. Например, можно вначале внести поправку на температуру в каждый результат измерения диаметра, а потом усреднить. Можно усреднить диаметры, а потом внести поправку. Казалось бы, какая разница, в какой последовательности вычислять. Но ЭВМ при выполнении программ переводит числа из одной системы счисления в другую и выполняет арифметические операции, округляя промежуточные и конечные результаты по правилам, заложенным в нее конструктором. Результат вычислений зависит от порядка вычислений, от способов представления и округления чисел в ЭВМ. Какой из них имеет требуемую точность? Какова достоверность результата?
Необходимо учитывать особенности Арифметики ЭВМ. Ведь отвечать за достоверность результата буду я, а не ЭВМ. А что если не достоверный результат приведет к катастрофе.
“Какой кошмар, какая сложность”, – подумал Начинающий.
“Тоже мне пример, элементарщина. Нужные мне вычисления ЭВМ выполняет порой за час и выдает достоверные результаты”, – подумал Профессионал.
“Вы оба правы”, – сказал бы я им. И молодому, Начинающему добавил, – “В третьем классе таблица умножения это был кошмар, а теперь? “Не Боги горшки обжигают”. “Взялся за гуж, не говори, что не дюж”.
Пример действительно элементарный, но показательный. Он вскрывает теснейшую взаимосвязь тройки прикладных дисциплин: Теории и практики измерений, Вычислительной математики и Арифметики ЭВМ. В конечном итоге эта тройка призвана обеспечивать достоверное решение практических задач с применением ЭВМ в теснейшей взаимосвязи, но, к сожалению, до сей поры она не обеспечивает в полном объеме стоящую перед ней задачу. Не правда ли, уважаемый Профессионал, Вам хотелось бы иметь программу, автоматически определяющую по математической модели исходных данных и функции оптимальный порядок вычислений для получения результата с заданной точностью. Программу, указывающую достижима ли требуемая точность результата, и какие требования необходимо предъявить к точности исходных данных, способам представления и округления промежуточных результатов в ЭВМ, чтобы получить требуемую точность результата. Где она? Что мешает написать подобную программу? Отсутствие единой теории приближенных вычислений на ЭВМ, охватывающей все три дисциплины. Этот недостаток зачастую приводит к недопустимо большим ошибкам в результатах выполнения программ и к невосполнимым потерям, в том числе к гибели людей.
Единая теория приближенных вычислений должна учесть особенности Арифметики современных ЭВМ или предъявить к Арифметике ЭВМ обоснованные требования. В последнем случае конструкторы ЭВМ должны их неукоснительно соблюдать. К сожалению Арифметика современных ЭВМ и Теория приближенных вычислений не обеспечивают необходимую взаимную поддержку.
Молодым и Начинающим. Именно Вы решите эту задачу сближения двух математик, и Ваши ЭВМ будут гарантировать достоверность вычислений. Но для того, чтобы это сделать и научиться пользоваться правильно тем, что имеем, нужно хорошо овладеть всей тройкой дисциплин такой, какова она есть сегодня.