Арифметика с плавающей точкой: форматы данных и реализация операций
Недостатком описания чисел в формате с фиксированной точкой является неудобство представления очень больших и очень маленьких чисел при использовании разумной длины слова w. Это ограничение снимается, если используется формат описания с плавающей точкой. Любое двоичное число с плавающей точкой можно представить в виде ±F·2E, где F обозначает мантиссу, или дробную часть, 2 - основание системы исчисления, а E - порядок. Длина слова при представлении числа в формате с плавающей точкой - w = f+e+1, где f - количество бит, отводимых для хранения мантиссы (длина мантиссы), а e - количество бит, отводимых для хранения порядка (длина порядка). Ещё один бит используется для записи знака числа, он обозначается символом s (sign). Знаковый бит положительного числа содержит нуль (s = 0), отрицательного - единицу (s = 1). Общее представление числа в формате с плавающей точкой показано на рис. 11 а. Работая с библиотекой Filter Design и, в частности, с программой fdatool, пользователь может применять один из трёх форматов с плавающей точкой: single, double (с обычной и двойной точностью, соответственно), определяемые стандартом IEEE 754 для двоичной арифметики с плавающей точкой, а также формат float. Выбор того или иного формата осуществляется, как ранее было отмечено, в окнах колонки Mode страницы Set Quantization Parameters. В колонке Format устанавливается спецификация формата, имеющая ту же форму, что и для арифметики с фиксированной точкой: [w, f], где w - длина слова, f - длина мантиссы. В соответствии со стандартом IEEE 754, показатель записывается со смещением B. Это значит, что для получения истинного значения порядка надо из содержимого поля порядка, то есть из величины E, вычесть величину B, определяемую по формуле
B = 2e-1 – 1. Например, если длина порядка равна 8 (e = 8), то E может принимать значения в интервале [0, 255]. Значит, значение порядка лежит в пределах интервала [0, 255] – (28-1 – 1) = [0, 255] – 127 = [-127, 128]. В системе MATLAB граничные значения порядка зарезервированы для особых случаев, например, для отображения результатов деления конечной величины на нуль (inf), деления нуля на нуль (NaN) и др. Поэтому в приведённом примере диапазон порядка лежит в интервале [-126, 127]. Мантиссу числа с плавающей точкой можно записать по-разному. Сдвигая позицию двоичной точки влево или вправо, надо лишь соответствующим образом увеличивать или уменьшать порядок. Для достижения наибольшей точности мантиссу логично было бы расположить так, чтобы её старший бит (ближайший справа от точки) содержал единицу. Однако, раз при таком расположении содержимое старшего бита мантиссы всегда единица, её нет нужды запоминать. Этот бит является скрытым. Следовательно, если под мантиссу отведено e бит, запоминается на самом деле e+1 бит (e бит, следующие за старшим, скрытым битом мантиссы, плюс скрытый бит). Таким образом, взаимосвязь между величиной, записанной в формате, показанном на рис. 11 а, и истинным значением v задаётся в виде v = (-1)s(2E-B)(1. F). Числа, представленные таким способом, называются нормализованными. В некоторых случаях может возникнуть ситуация, когда результатом какой-либо арифметической операции является число, имеющее такое маленькое абсолютное значение, что для него величина E = порядок + B < 0. Это явление называется исчезновением разрядов порядка, или антипереполнением порядка. Для того, чтобы увеличить порядок и тем самым избежать явления переполнения, используются денормализованные числа. Они получаются из нормализованного представления сдвигом мантиссы вправо и соответствующим увеличением порядка (то есть уменьшением модуля порядка). Для денормализованных чисел взаимосвязь записи в формате, показанном на рис. 11 а, и истинного значения определяется соотношением
v = (-1)s(2-B+1)(0. F). Читатель может заметить, что для задания знака числа с плавающей точкой отведён один бит, в то время как знак имеет и мантисса, и порядок. В описываемых форматах знаковый бит содержит знак мантиссы, знак же порядка определяется по результату вычитания смещения B из содержимого поля порядка E. Представления чисел при использовании форматов single и double показаны на рис. 11 б и в, соответственно. При выборе одного из этих форматов автоматически устанавливаются параметры в колонках Round mode, Overflow mode и Format. Параметрами Round mode в этом случае являются значения round, а Overflow mode - saturate. В табл. 2 указаны допустимые значения порядков и численных значений при использовании форматов single и double. Таблица 2. Допустимые значения порядков и численных значений при использовании форматов single и double
Ещё один формат, с которым работает fdatool - это float. Представление чисел в этом формате также соответствует приведённым выше формулам и обозначениям, показанным на рис. 11 а, но в этом случае пользователь может произвольно задавать длину мантиссы и порядка, а также устанавливать значения в полях Format и Round mode. При этом длина порядка должна находиться в интервале 1 £ e £ 11, а длина слова - в интервале e+1 £ w £ 64. Независимо от выбранного формата (single, double или float), в случае возникновения переполнения на выходе соответствующего квантователя устанавливается значение inf или -inf, поэтому окна колонки Overflow mode неактивны.
Рисунок 12. Параметры фильтра-прототипа и квантованного фильтра
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|