exponenta event banner

Арифметические операции

Примечание

Эти разделы помогут понять, какие типы данных и варианты масштабирования приводят к переполнению или потере точности.

Арифметика по модулю

Двоичная математика основана на арифметике по модулю. Арифметика по модулю использует только конечное множество чисел, перенося результаты любых вычислений, которые попадают за пределы данного множества обратно в множество.

Например, общие повседневные часы используют арифметику по модулю 12. Числа в этой системе могут быть только от 1 до 12. Поэтому в системе «часов» 9 плюс 9 равно 6. Это может быть легче визуализировано как круг чисел:

Аналогично, двоичная математика может использовать только числа 0 и 1, и любые арифметические результаты, которые выходят за пределы этого диапазона, переносятся «вокруг окружности» на 0 или 1.

Дополнение двух

Дополнение Two является общим представлением знаковых чисел с фиксированной точкой. В дополнении двух положительные числа всегда начинаются с 0, а отрицательные - с 1. Если начальный бит числа дополнения двойки равен 0, то значение получается вычислением стандартного двоичного значения числа. Если ведущий бит числа дополнения двойки равен 1, значение получается, предполагая, что самый левый бит отрицательный, и затем вычисляя двоичное значение числа. Например,

01=(0+20)=111=((−21)+(20))=(−2+1)=−1

Чтобы вычислить негатив двоичного числа с помощью дополнения двух,

  1. Возьмите комплемент. То есть, все 0 разворачиваются на 1, а все 1 переворачиваются на 0.

  2. Добавьте 1 с помощью двоичной математики.

  3. Отбрасывать биты, переносимые за пределы исходной длины слова.

Например, можно принять отрицательное значение 11010 (-6). Во-первых, возьмите одно дополнение числа или переверните биты:

11010→00101

Затем добавьте 1, заключив все числа в 0 или 1:

00101+100110 (6)

Сложение и вычитание

Сложение чисел с фиксированной точкой требует выравнивания двоичных точек добавленных точек. Затем добавление выполняется с использованием двоичной арифметики, так что не используется число, отличное от 0 или 1.

Например, рассмотрим добавление 010010.1 (18.5) с 0110.110 (6.75):

010010.1+0110.110011001.010    (18.5)(6.75)(25.25)

Вычитание с фиксированной точкой эквивалентно добавлению при использовании значения дополнения для любых отрицательных значений. При вычитании добавленные значения должны быть расширены, чтобы соответствовать длине друг друга. Например, рассмотрим вычитание 0110.110 (6.75) из 010010.1 (18.5):

Большинство блоков Toolbox™ системы DSP с фиксированной точкой, которые выполняют сложение, перед выполнением сложения приводят входы сумматора к типу данных накопителя. Поэтому дальнейшее смещение не требуется во время добавления, чтобы выстроить двоичные точки. Дополнительные сведения см. в разделе Слепки.

Умножение

Умножение чисел двух с фиксированной точкой дополнения прямо аналогично регулярному десятичному умножению, за исключением того, что промежуточные результаты должны быть расширены так, чтобы их левые стороны выровнялись, прежде чем сложить их вместе.

Например, рассмотрим умножение 10.11 (-1.25) на 011 (3):

Типы данных умножения

На следующих диаграммах показаны типы данных, используемые для умножения с фиксированной точкой в программном обеспечении System Toolbox. Диаграммы иллюстрируют различия между типами данных, используемыми для вещественно-реального, комплексно-реального и комплексно-комплексного умножения. См. отдельные страницы ссылок, чтобы определить, принимает ли конкретный блок сложные вводы с фиксированной точкой.

В большинстве случаев в маске блока можно задать типы данных, используемые во время умножения. Подробнее см. в разделе Кастировки.

Примечание

На следующих диаграммах показано использование типов данных с фиксированной точкой для умножения в программном обеспечении System Toolbox. Они не представляют фактические подсистемы, используемые программным обеспечением для выполнения умножения.

Умножение в реальном масштабе.  На следующей диаграмме показаны типы данных, используемые при умножении двух вещественных чисел в программном обеспечении System Toolbox. Программа возвращает выходные данные этой операции в виде выходных данных продукта, как показано на следующем рисунке.

Вещественно-комплексное умножение.  На следующей диаграмме показаны типы данных, используемые при умножении вещественного и комплексного числа с фиксированной точкой в программном обеспечении System Toolbox. Вещественно-комплексное и комплексно-реальное умножение эквивалентны. Программа возвращает выходные данные этой операции в виде выходных данных продукта, как показано на следующем рисунке.

Комплексно-комплексное умножение.  На следующей схеме показано умножение двух комплексных чисел с фиксированной точкой в программном обеспечении System Toolbox. Обратите внимание, что программа возвращает выходные данные этой операции в виде выходных данных накопителя, как показано на следующем рисунке.

Системная панель инструментов перед выполнением операций сложения или вычитания блокирует тип данных накопителя. На предыдущей схеме это эквивалентно коду C

acc=ac;
acc-=bd;

для вычитателя, и

acc=ad;
acc+=bc;

для сумматора, где acc - аккумулятор.

Броски

Многие блоки System Toolbox с фиксированной точкой, выполняющие арифметические операции, позволяют указать типы данных накопителя, промежуточного продукта и выходного продукта, а также тип выходных данных блока. В этом разделе представлен обзор результатов для этих типов данных, что позволяет определить, будут ли выбранные типы данных вызывать расширение знака, заполнение нулями, округление и/или переполнение. Расширение знака - это добавление битов, которые имеют значение старшего бита к верхнему концу числа дополнения двух. Расширение знака не изменяет значение двоичного числа. Заполнение расширяет младший бит двоичного слова одним или несколькими нулями.

Приведение к типу данных накопителя

Для большинства блоков System Toolbox с фиксированной точкой, выполняющих сложение или вычитание, операнды сначала преобразуются в тип данных накопителя. В большинстве случаев тип данных накопителя можно указать в маске блока. Дополнительные сведения см. в описании параметра Тип данных накопителя в разделе Указание атрибутов фиксированных точек для блоков (панель инструментов системы DSP). Так как перед их сложением оба сложения преобразуются в один и тот же тип данных накопителя, никакого дополнительного сдвига для обеспечения выравнивания их двоичных точек не требуется. Результат сложения остается в типе данных накопителя, с возможностью переполнения.

Результаты для промежуточного продукта или типа выходных данных продукта

Для блоков System Toolbox, выполняющих умножение, вывод множителя помещается в тип выходных данных продукта. Блоки, которые затем передают выходные данные продукта обратно в множитель, могут сначала привести их к промежуточному типу данных продукта. В большинстве случаев эти типы данных можно указать в маске блока. Дополнительные сведения см. в описании параметров типа данных промежуточного продукта и вывода продукта в разделе Определение атрибутов фиксированных точек для блоков (панель инструментов системы DSP).

Приведение к типу выходных данных

Многие блоки панели системных инструментов с фиксированной точкой позволяют указать тип данных и масштаб вывода блока на маске. Помните, что программное обеспечение не допускает смешанные типы на входном и выходном портах своих блоков. Поэтому, если требуется указать тип выходных данных с фиксированной точкой и масштаб для блока панели системных инструментов, поддерживающего типы данных с фиксированной точкой, необходимо подать входной порт этого блока с сигналом с фиксированной точкой. Окончательная отливка блока System Toolbox с фиксированной точкой соответствует типу выходных данных блока.

Следует отметить, что, хотя нельзя смешивать сигналы с фиксированной запятой и сигналы с плавающей запятой на входном и выходном портах блоков, на портах блоков, поддерживающих сигналы с фиксированной запятой, можно использовать сигналы с фиксированной запятой с различной длиной слов и дробей.

Примеры литья

При выборе этих промежуточных типов данных, а также любых других промежуточных типов данных с фиксированной точкой, разрешенных определенным блоком, важно учитывать их последствия. В зависимости от выбранных типов данных может произойти переполнение и/или округление. В следующих двух примерах показаны случаи переполнения и округления.

Приведение более короткого типа данных к более длинному типу данных.  Рассмотрим приведение ненулевого числа, представленного четырехразрядным типом данных с двумя дробными битами, к восьмиразрядному типу данных с семью дробными битами:

Как показано на диаграмме, исходные биты сдвигаются вверх так, чтобы двоичная точка соответствовала позиции целевой двоичной точки. Высший исходный бит не подходит, поэтому может произойти переполнение и результат может насытиться или обернуться. Пустые биты на нижнем конце типа данных назначения дополняются либо 0, либо 1:

  • Если переполнение не происходит, пустые биты заполняются нулями.

  • Если происходит сворачивание, пустые биты заполняются нулями.

  • Если происходит насыщение,

    • Пустые биты положительного числа дополняются 1.

    • Пустые биты отрицательного числа дополняются нулями.

Можно видеть, что даже при переходе от более короткого типа данных к более длинному может произойти переполнение. Это может произойти, когда целочисленная длина исходного типа данных (в данном случае два) больше, чем целочисленная длина целевого типа данных (в данном случае один). Аналогично, округление может быть необходимо даже при кадрировании из более короткого типа данных в более длинный тип данных, если целевой тип данных и масштабирование имеют меньше дробных битов, чем источник.

Приведение более длинного типа данных к более короткому типу данных.  Рассмотрим приведение ненулевого числа, представленного восьмиразрядным типом данных с семью дробными битами, к четырехразрядному типу данных с двумя дробными битами:

Как показано на диаграмме, исходные биты сдвигаются вниз, так что двоичная точка совпадает с позицией целевой двоичной точки. Нет значения для самого высокого бита от источника, поэтому результат расширен для заполнения целочисленной части целевого типа данных. Нижние пять битов источника не вписываются в длину дроби места назначения. Следовательно, точность может быть потеряна по мере округления результата.

В этом случае, даже если приведение происходит от более длинного типа данных к более короткому типу данных, все целочисленные биты сохраняются. И наоборот, полная точность может поддерживаться даже при приведении к более короткому типу данных, если длина дроби целевого типа данных равна или больше длины дроби исходного типа данных. В этом случае, однако, биты теряются от верхнего конца результата и может произойти переполнение.

Наихудший случай возникает, когда и целочисленная, и дробная длина целевого типа данных короче, чем у исходного типа данных и масштабирования. В этом случае может произойти как переполнение, так и потеря точности.