Представление рациональных чисел
Большинство современных карт считаются 16-битными, но на практике младшие разряды их АЦП оцифровывают только тепловой шум усилителя и собственных старших разрядов, а также ошибки калибровки того и другого. Честные (т. е. такие, у которых все разряды значащие) 16-разрядные АЦП используются в профессиональной звукозаписывающей и измерительной аппаратуре, 24-разрядные АЦП относятся к прецизионной аппаратуре, а 32-разрядные на практике не применяют.
Вычислительные системы широко используют представления чисел с плавающей точкой, только не десятичной, а двоичной (рис. 1.4). Идея этого представления состоит в том, чтобы нормализовать позиционную двоичную дробь, избавившись от незначащих старших нулевых битов и освободив место для [возможно] значащих младших разрядов. Сдвиг, который нужен для нормализации, записывается в битовое поле, называемое порядком. Само же число называется мантиссой.
Рис. 1.4. Число с плавающей двоичной точкой
Число с плавающей точкой, таким образом, состоит из двух битовых полей – мантиссы М и порядка Е. Число, представленное двумя такими полями, равно Мх2Е. Нормализация состоит в отбрасывании всех старших нулей, поэтому старший бит нормализованной двоичной мантиссы всегда равен 1. Большинство современных реализаций чисел с плавающей точкой используют этот факт для того, чтобы объявить незначащими не только старшие нули, но и эту единицу, и, таким образом, выигрывают дополнительный бит точности мантиссы.
Сложение двух чисел с плавающей точкой состоит в денормализации мантисс (совмещении двоичных точек), их сложении и нормализации результата. Перемножение таких чисел, соответственно, выполняется перемножением мантисс, сложением порядков и опять-таки нормализацией результата.
В некоторых старых архитектурах, например БЭСМ-6, все арифметические операции выполнялись над числами с плавающей точкой, однако существовала возможность выключить нормализацию мантиссы. Ненормализованные числа с плавающей точкой использовались для представления значений с фиксированной точкой, в том числе и целочисленных.
Стандарт языка ANSI С требует наличия 32-битового (8-разрядный порядок и 24-разрядная мантисса) и 64-битового (16-разрядный порядок и 48-разрядная мантисса) представлений чисел с плавающей точкой, которые называются, соответственно, числами одинарной и двойной точности (float и double float или просто double). Числа двойной точности, конечно же, не могут быть результатом прямых измерений физических величин, но позволяют избежать накопления ошибок округления при вычислениях.
Большинство современных процессоров общего назначения и ориентированных на приложения цифровой обработки сигналов (ЦОС) предоставляет операции над такими числами, а зачастую и над числами большей разрядности. Операции практически всегда включают сложение, вычитание, умножение и деление. Часто на уровне системы команд реализуются и элементарные функции: экспонента, логарифм, квадратный корень, синус, косинус и т. д. Процессоры ЦОС нередко предоставляют и отдельные шаги дискретного преобразования Фурье.
Количество операций с плавающей точкой в секунду (Floating Operations Per Second, FLOPS, в наше время чаше говорят о Mflops – миллионах операций в секунду), которые может исполнять процессор, является одной из важных его характеристик, хотя и не для всех приложений эта характеристика критична.