Вычисление cos a и sin a
12. До сих пор вопрос о вычислении угла вращения не затрагивался, но следует отметить, что оно не покрывается анализом, данным в гл. 3, § 20. На практике требуется значительное внимание к деталям, если мы хотим обеспечить, чтобы:
(i)
было очень близко к единице, так что матрица преобразования действительно была бы почти ортогональна и преобразованная матрица почти подобна исходной;
(ii)
было очень мало, так что мы вправе заменить
нулем.
Опустим индекс
и напишем
где
Тогда для
, лежащего в пределах
формально имеем
где
должен выбираться положительным,
иметь такой же знак, как и
Теперь, если х мало по сравнению с
уравнения (12.3) дают очень неудовлетворительное определение
Для десятизначных десятичных вычислений как с фиксированной, так и с плавающей запятой (12.3) дает
для всех значений
удовлетворяющих неравенству
Итак, хотя условие (i) выполняется, условие
нет.
С другой стороны, если используется плавающая запятая, определение
из (12.3) вполне удовлетворительно. Действительно, из гл. 3, §§ 6 и 10 имеем
Объединяя эти результаты, получаем
где
есть точное значение, соответствующее
Здесь и далее оценки, которые мы даем, неточные; часто их можно будет улучшить с помощью более подробного анализа. Значение
для
может быть получено из соотношения
Используя плавающую арифметику и вычисленное значение с, имеем
откуда, учитывая (12.4) и (12.5), можем заключить, что
Итак,
имеют малые относительные ошибки по сравнению с точными значениями, соответствующими данным х и у. Теперь ясно, что условие (ii) при вычисленных значениях выполняется.
13. Если могут быть накоплены скалярные произведения, то для того, чтобы получить аналогичные результаты с фиксированной запятой, очень хорош следующий способ. Вычисляем точно
и затем выбираем наибольшее целое число
, для которого
Далее выполняются вычисления, использующие
вместо х и у в уравнении (12.3) для
и в уравнении (12.6) для
Если же скалярные произведения не могут быть накоплены, то мы можем написать
для
и соответствующие выражения для
(ср. гл. 3, § 30).