Эти разделы помогут вам изучить, какой тип данных и масштабирующийся выбор приводят к переполнению или потере точности.
Бинарная математика основана на арифметике по модулю. Арифметика по модулю использует только конечное множество чисел, перенося результаты любых вычислений, которые выходят за пределы данного, задержанного в набор.
Например, общие повседневные часы используют по модулю 12 арифметик. Числа в этой системе могут только быть 1 - 12. Поэтому в системе “часов”, 9 плюс 9 равняется 6. Это может более легко визуализироваться как круг номера:
Точно так же бинарная математика может только использовать числа 0 и 1, и любые арифметические результаты, которые выходят за пределы этой области значений, перенесены “вокруг круга” или к 0 или к 1.
Дополнение Туо является общим представлением чисел фиксированной точки со знаком. В дополнении two положительные числа всегда запускаются с 0, и отрицательные числа всегда запускаются с 1. Если ведущий бит дополнительного номера two 0, значение получено путем вычисления стандартного двоичного значения номера. Если ведущий бит дополнительного номера two равняется 1, значение получено путем предположения, что крайний левый бит отрицателен, и затем вычисление двоичного значения номера. Например,
Вычислить отрицание двоичного числа с помощью дополнения two,
Возьмите поразрядное дополнение до единицы. Таким образом, весь 0 инвертируются к 1's, и все 1's инвертируются к 0.
Добавьте 1 использующую бинарную математику.
Отбросьте любые биты, которые несут вне исходного размера слова.
Например, рассмотрите взятие отрицания 11 010 (-6). Во-первых, возьмите поразрядное дополнение до единицы номера или инвертируйте биты:
Затем добавьте 1, перенеся все числа к 0 или 1:
Сложение чисел фиксированной точки требует, чтобы двоичные точки слагаемых были выровнены. Сложение затем выполняется с помощью двоичной арифметики так, чтобы никакой номер кроме 0 или 1 не использовался.
Например, рассмотрите сложение 010010,1 (18.5) с 0110,110 (6.75):
Вычитание фиксированной точки эквивалентно добавлению при использовании дополнительного значения two в любых отрицательных величинах. В вычитании слагаемые должны быть знаком, расширенным, чтобы совпадать с длиной друг друга. Например, рассмотрите вычитание 0110.110 (6.75) от 010010,1 (18.5):
Большая часть фиксированной точки блоки DSP System Toolbox™, которые выполняют сложение, бросила входные параметры сумматора к типу данных аккумулятора прежде, чем выполнить сложение. Поэтому никакая дальнейшая перемена не необходима во время сложения, чтобы выстроить в линию двоичные точки. Смотрите Броски для получения дополнительной информации.
Умножение дополнительных чисел фиксированной точки two походит на непосредственно регулярное десятичное умножение, за исключением того, что промежуточными результатами должен быть знак, расширенный так, чтобы их левые стороны выровнялись, прежде чем вы добавите их вместе.
Например, рассмотрите умножение 10,11 (-1.25) с 011 (3):
Следующие схемы показывают типы данных, используемые в умножении фиксированной точки в программном обеспечении System Toolbox. Схемы иллюстрируют различия между типами данных, используемыми в действительно-действительном, комплексно-действительном, и комплексно-комплексном умножении. Смотрите отдельные страницы с описанием, чтобы определить, принимает ли конкретный блок комплексные входные параметры фиксированной точки.
В большинстве случаев можно установить типы данных, используемые во время умножения в маске блока. Для получения дополнительной информации смотрите Броски.
Следующие схемы показывают использование типов данных с фиксированной точкой в умножении в программном обеспечении System Toolbox. Они не представляют фактические подсистемы, используемые программным обеспечением, чтобы выполнить умножение.
Действительно-действительное Умножение. Следующая схема показывает типы данных, используемые в умножении двух вещественных чисел в программном обеспечении System Toolbox. Программное обеспечение возвращает выходной параметр этой операции в типе выходных данных продукта, когда следующий рисунок показывает.
Действительно-комплексное Умножение. Следующая схема показывает типы данных, используемые в умножении действительного и комплексного номера фиксированной точки в программном обеспечении System Toolbox. Действительно-комплексное и комплексно-действительное умножение эквивалентно. Программное обеспечение возвращает выходной параметр этой операции в типе выходных данных продукта, когда следующий рисунок показывает.
Комплексно-комплексное Умножение. Следующая схема показывает умножение двух комплексных чисел фиксированной точки в программном обеспечении System Toolbox. Обратите внимание на то, что программное обеспечение возвращает выходной параметр этой операции в типе выходных данных аккумулятора, когда следующий рисунок показывает.
Системный Тулбокс блокирует бросок к типу данных аккумулятора прежде, чем выполнить операции сложения или операции вычитания. В предыдущей схеме это эквивалентно коду С
acc=ac; acc-=bd;
для вычитающего устройства, и
acc=ad; acc+=bc;
для сумматора, где acc является аккумулятором.
Много Системных блоков Тулбокса фиксированной точки, которые выполняют арифметические операции, позволяют вам задавать аккумулятор, промежуточный продукт, и типы выходных данных продукта, как применимые, а также тип выходных данных блока. В этом разделе приведены обзор бросков к этим типам данных, так, чтобы можно было сказать, вызовут ли типы данных, которые вы выбираете, расширение знака, дополняющее нулями, округлением и/или переполнением. Расширение знака является сложением битов, которые имеют значение старшего значащего бита к верхнему уровню дополнительного номера two. Расширение знака не изменяет значение двоичного числа. Дополнение расширяет младший значащий бит двоичного слова с одним или несколькими нулями.
Для большинства Системных блоков Тулбокса фиксированной точки, которые выполняют сложение или вычитание, операнды сначала брошены к типу данных аккумулятора. Наиболее часто можно задать тип данных аккумулятора на маске блока. Для получения дополнительной информации смотрите, что описание для параметра типа данных Accumulator в Задает Атрибуты Фиксированной точки для Блоков (DSP System Toolbox). Поскольку слагаемые оба брошены к тому же типу данных аккумулятора, прежде чем они будут добавлены вместе, никакой дополнительный сдвиг не необходим, чтобы обеспечить, чтобы их двоичные точки выровнялись. Результат сложения остается в типе данных аккумулятора с возможностью переполнения.
Для Системных блоков Тулбокса, которые выполняют умножение, выход множителя помещается в тип выходных данных продукта. Блоки, которые затем питают продукт выходом назад во множитель, могут сначала бросить его к промежуточному типу данных продукта. Наиболее часто можно задать эти типы данных на маске блока. Для получения дополнительной информации см. описание для Intermediate Product, и параметры типа данных Product Output в Задают Атрибуты Фиксированной точки для Блоков (DSP System Toolbox).
Много Системных блоков Тулбокса фиксированной точки позволяют вам задавать тип данных и масштабирование блока выход на маске. Помните, что программное обеспечение не позволяет смешанные типы на портах ввода и вывода его блоков. Поэтому, если требуется задать тип выходных данных фиксированной точки и масштабирующийся для блока System Toolbox, который поддерживает типы данных с фиксированной точкой, необходимо питать входной порт того блока с сигналом фиксированной точки. Итоговый бросок, сделанный блоком System Toolbox фиксированной точки, к типу выходных данных блока.
Обратите внимание на то, что несмотря на то, что вы не можете смешать фиксированную точку и сигналы с плавающей точкой на портах ввода и вывода блоков, вы можете иметь сигналы фиксированной точки с различным словом и фракционировать длины на портах блоков та фиксированная точка поддержки сигналы.
Важно иметь в виду разветвления каждого броска при выборе этих промежуточных типов данных, а также любых других промежуточных типов данных с фиксированной точкой, которые позволены конкретным блоком. В зависимости от типов данных вы выбираете, переполняетесь, и/или округление может произойти. Следующий двум примерам демонстрирует случаи, где переполнение и округление могут произойти.
Бросьте от Более короткого Типа данных до Более длительного Типа данных. Рассмотрите бросок ненулевого номера, представленного четырехбитным типом данных с двумя дробными битами, к восьмибитному типу данных с семью дробными битами:
Когда схема показывает, исходные биты смещены так, чтобы двоичная точка совпадала с целевым положением двоичной точки. Самый высокий исходный бит не соответствует, таким образом, переполнение может произойти, и результат может насыщать или перенестись. Пустые биты на нижнем уровне целевого типа данных дополнены или 0 или 1's:
Если переполнение не происходит, пустые биты дополнены 0.
Если перенос происходит, пустые биты дополнены 0.
Если насыщение происходит,
Пустые биты положительного числа дополнены 1's.
Пустые биты отрицательного числа дополнены 0.
Вы видите, что даже с броском от более короткого типа данных до более длительного типа данных, переполнение может все еще произойти. Это может произойти, когда целочисленная длина типа исходных данных (в этом случае два) более длинна, чем целочисленная длина целевого типа данных (в этом случае один). Точно так же округление может быть необходимым, бросив от более короткого типа данных до более длительного типа данных, если целевой тип данных и масштабирование имеют меньше дробных битов, чем источник.
Бросьте от Более длительного Типа данных до Более короткого Типа данных. Рассмотрите бросок ненулевого номера, представленного восьмибитным типом данных с семью дробными битами, к четырехбитному типу данных с двумя дробными битами:
Когда схема показывает, исходные биты смещены вниз так, чтобы двоичная точка совпадала с целевым положением двоичной точки. Нет никакого значения для самого высокого бита из источника, таким образом, результатом является знак, расширенный, чтобы заполнить целочисленный фрагмент целевого типа данных. Нижняя часть пять битов источника не помещается в дробную длину места назначения. Поэтому точность может быть потеряна, когда результат округлен.
В этом случае, даже при том, что бросок от более длительного типа данных до более короткого типа данных, все целочисленные биты обеспечены. С другой стороны полная точность может быть обеспечена, даже если вы бросаете к более короткому типу данных, пока дробная длина целевого типа данных является той же длиной или дольше, чем дробная длина типа исходных данных. В этом случае, однако, биты потеряны от верхнего уровня результата, и переполнение может произойти.
Худший случай происходит, когда и целочисленная длина и дробная длина целевого типа данных короче, чем те из типа исходных данных и масштабирования. В этом случае оба переполнения и потеря точности могут произойти.