Плоские вращения в арифметике с фиксированной запятой
29. Теперь обратим внимание на вычисления с фиксированной запятой. Так как каждый элемент ортогональной матрицы лежит в пределах от —1 до +1 и нормы преобразованных матриц остаются постоянными (с точностью до небольших изменений из-за ошибок округления), использование арифметики с фиксированной запятой не вызывает тяжелых проблем с нормировкой.
Рассмотрим сначала проблему § 20. Дан вектор х с компонентами с фиксированной запятой и мы хотим определить вращение в плоскости
так, чтобы
Пусть
При вычислении с плавающей запятой, используя уравнения (20.2), почти ортогональная матрица получается без каких-либо особых вычислительных хитростей, но так не всегда можно делать в арифметике с фиксированной запятой. Предположим, например, что мы имеем
и используем шестизначную десятичную арифметику. Тогда
(с точностью до шести десятичных знаков) и далее
Сразу же видно, что соответствующее приближенное плоское вращение далеко от ортогонального. Мы опишем два метода преодоления этого недостатка, первый из которых очень удобен для той вычислительной машины, в которой скалярное произведение может быть накоплено точно. В любом случае мы берем
если
Обозначим
и пусть
вычислено точно; согласно (29.1) это не может дать переполнение. Затем определяем 22, где
и к есть наименьшее целое, для которого
Наконец, требуемые 5 и с вычисляются с использованием соотношений
Величины
могут быть вычислены без ошибок округления, и мы имеем
Объединяя эти результаты, получим
где
Нормировка
гарантирует, что с и
имеют малые абсолютные ошибки, хотя одно или другое может иметь большую относительную ошибку. Если мы запишем
то
— нулевая матрица, за исключением пересечения
строк и столбцов, где у нее будут такие элементы:
Отсюда и из аддитивного свойства норм мы имеем
для любого приемлемого
Аналогично