Числа фиксированной точки используют целые числа и целочисленную арифметику, чтобы аппроксимировать вещественные числа. Они позволяют вам выполнить вычисления, включающие вещественные числа, не требуя поддержки с плавающей точкой в базовом оборудовании системы. Для получения дополнительной информации смотрите Данные Фиксированной точки в диаграммах Stateflow.
Общее уравнение для операции двоичной арифметики между операндами фиксированной точки
c = a <op> b
a
и b
являются числами фиксированной точки, и <op>
относится к сложению, вычитанию, умножению или делению. Результатом операции является номер фиксированной точки c
формы
c
= S c
Q c
+ B c
.
Фиксированная точка для c
определяет наклонный S c
, смещение B c
, и количество битов раньше хранило квантованный целочисленный Q c
. Для каждой арифметической операции эта таблица приводит значение квантованного целочисленного Q c
с точки зрения значений операндов (a
и b
) и фиксированная точка для c
.
Операция | Наклон и масштабирование смещения | Масштабирование двоичной точки | |
---|---|---|---|
Сложение | c = a+b | Q c = вокруг ((S a /Sc ) Q a + (S b /Sc ) Q b + (B a + B b – B c )/Sc ) | Q c = вокруг ((S a /Sc ) Q a + (S b /Sc ) Q b ) |
Вычитание | c = a-b | Q c = вокруг ((S a /Sc ) Q a – (S b /Sc ) Q b – (B a – B b – B c )/Sc ) | Q c = вокруг ((S a /Sc ) Q a – (S b /Sc ) Q b ) |
Умножение | c = a*b | Q c = вокруг ((S a S b /Sc ) Q a Q b + (B a S b /Sc ) Q a + (B b S a /Sc ) Q b + (B a B b – B c )/Sc ) | Q c = вокруг ((S a S b /Sc ) Q a Q b ) |
Деление | c = a/b | Q c = вокруг ((S a Q a + B a ) / (S c (S b Q b + B b )) – (B c /Sc )) | Q c = вокруг ((S a / (S b S c )) Q a /Qb ) |
Чтобы упростить эти выражения и избежать в вычислительном отношении дорогих операций, используйте двоичную точку, масштабирующуюся, чтобы закодировать все ваши данные фиксированной точки. С этой установкой наклон является целочисленной степенью двойки, и смещение является нулем. Затем все операции фиксированной точки состоят из целочисленной арифметики и сдвигов разряда на квантованных целых числах.
Результат арифметической операции зависит от метода округления, который вычисляет значение квантованного целочисленного Q c
. Для получения дополнительной информации смотрите Операции Преобразования.
Можно использовать реляционные операции, чтобы сравнить данные фиксированной точки. Сравнение значений фиксированной точки различных типов может привести к неожиданным результатам, потому что каждый операнд преобразован в общий тип для сравнения. Из-за округления или ошибок переполнения во время преобразования, некоторые значения, которые, кажется, равны, не равны как числа фиксированной точки.
Например, предположите, что a
и b
представляют реальное значение V = 2.2 в двух различных схемах кодирования фиксированной точки:
a
является номером фиксированной точки с наклонным S a
= 0.3 и смещение B a
= 0.1. Квантованное целое число для a
:
Q a
= (V – B a
)/Sa
= (2.2 – 0.1)/0.3 = 7.
b
является номером фиксированной точки с наклонным S b
= 0.7 и смещение B b
= 0.1. Квантованное целое число для b
:
Q b
= (V – B b
)/Sb
= (2.2 – 0.1)/0.7 = 3.
Чтобы сравнить эти значения, график сначала преобразовывает их в общую фиксированную точку с наклонным аккомпанементом S = 1.06811 · ≈ S 10–5 a
/28087 ≈ S b
· 2–16 и смещение аккомпанемент B = 0.1. (В этом случае наклонный аккомпанемент S является результатом приближенного значения S a
/Sb
= 0.3/0.7 ≈ 28087 · 2–16.) В этой общей схеме кодирования a
и b
соответствуют этим квантованным целым числам:
Q a'
= S a
Q a
/Scomp = Q a
(S a
/Scomp) ≈ 7 ⨉ 28087 = 196609
Q b'
= S b
Q b
/Scomp = Q b
(S b
/Scomp) ≈ 3 ⨉ 216 = 196608.
После преобразования квантованные целые числа отличаются. Несмотря на то, что a
и b
представляют то же реальное значение, они не равны как числа фиксированной точки.
В графиках, которые используют C в качестве языка действия, не поддержаны сравнения операндов фиксированной точки с несовпадающими смещениями.
В логической операции операнд фиксированной точки a
интерпретирован как false
, если это соответствует реальному значению для нуля в фиксированной точке a
. В противном случае a
интерпретирован как true
.
В графиках, которые используют MATLAB® в качестве языка действия, с помощью a
в логической операции, эквивалентно выражению a ~= cast(0,'like',a)
.
В графиках, которые используют C в качестве языка действия, с помощью a
в логической операции, эквивалентно выражению a != 0c
, где 0c
является фиксированной точкой контекстно-зависимая константа. Смотрите Фиксированную точку Контекстно-зависимые Константы.
Например, предположите, что a
является номером фиксированной точки с наклоном S a
= 0.25 и смещение B a
= 5.1. Используя a
в логической операции эквивалентно тестированию, удовлетворяет ли квантованный целочисленный Q a
условие
Q a
= вокруг ((0 – B a
)/Sa
) = вокруг (–5.1 / 0.25) = раунд (-20.4) = –20.
Поэтому a
эквивалентен false
, когда его реальное приближение
a
= S a
Q a
+ B a
= 0,25 ⨉ (–20) + 5.1 = 0.1.
Правила для выбора числового типа, используемого для результата операции на числах фиксированной точки, называются правилами продвижения фиксированной точки. Эти правила помогают поддержать вычислительную эффективность и удобство пользования.
Правила продвижения фиксированной точки определяют тип результата для операции
путем выбора наклонного S c = a <op> b
c
, смещение B c
и количество битов, wc
раньше хранил квантованный целочисленный Q c
. Эти параметры зависят от фиксированных точек операндов a
и b
, операция <op>
, которая будет выполняться, и свойство языка действия для графика.
В графике, который использует MATLAB в качестве языка действия, вы управляете правилами продвижения фиксированной точки через свойства фиксированной точки для графика. Смотрите Свойства Фиксированной точки.
Если вы устанавливаете свойство MATLAB Chart fimath
на Same as MATLAB
, то арифметические операции следуют правилам продвижения фиксированной точки по умолчанию для MATLAB. Смотрите Выполняют Вычисления с фиксированной точкой (Fixed-Point Designer).
Если вы задаете объект fimath
графика с SumMode
и набором ProductMode
к SpecifyPrecision
, то можно задать размер слова, наклон, и смещать за все суммы и продукты явным образом. См. fimath Свойства объектов (Fixed-Point Designer).
В графике, который использует C в качестве языка действия, правила продвижения фиксированной точки определяют тип для промежуточного значения результата. Это промежуточное значение затем брошено к типу, который вы задаете для c
.
Для всех арифметических операций количества по умолчанию битов wc
, используемый, чтобы сохранить квантованное целое число, является большим значением между:
Максимальное количество битов в типах операнда (wa
и wb
).
Количество битов в целочисленном размере слова для целевой машины (wint
).
Чтобы установить значение wint
, откройте диалоговое окно Model Configuration Parameters. На панели Hardware Implementation выберите Custom Processor
из Device vendor выпадающий список и введите целевой целочисленный размер слова в поле int. Для получения дополнительной информации смотрите Панель Аппаратной реализации (Simulink).
Можно избежать переполнения и улучшить точность в операциях с плавающей точкой при помощи специальной операции присвоения формы
. Специальная операция присвоения не следует правилам продвижения фиксированной точки. Вместо этого график определяет результат операции при помощи типа, который вы задаете для c := a <op> b
c
. Смотрите Продвижение Фиксированной точки Переопределения в Графиках C.
По умолчанию, графики, которые используют MATLAB в качестве сложения поддержки языка действия и вычитания только на данных фиксированной точки, заданных посредством масштабирования двоичной точки. Если любой операнд является номером фиксированной точки со знаком, то результат также подписывается. Выбор размера слова размещает целочисленные и дробные части каждого операнда в дополнение к возможному биту переноса. Дробная длина результата равна дробной длине самого точного операнда. Выполнять сложение и вычитание на данных фиксированной точки задало или при помощи наклона, который не является целочисленной степенью двойки или ненулевым смещением, задайте объект fimath
графика с набором SumMode
к SpecifyPrecision
.
Графики, которые используют C в качестве сложения поддержки языка действия и вычитания для операндов всех типов данных с фиксированной точкой. Результатом является номер фиксированной точки со знаком, только если подписываются оба операнда. Смешивание подписанных и операндов без знака может привести к неожиданным результатам и не рекомендуется. Наклон результата равен наклону наименее точного операнда. Чтобы упростить вычисления и привести к эффективному коду, смещения двух входных параметров добавлены для операции сложения и вычтены для операции вычитания.
a | b | MATLAB как язык действия | C как язык действия | |
---|---|---|---|---|
Знак | s a | s b | s c = s a || s b | s c = s a
&&
s b |
Размер слова | w a | w b | w c = макс. (w a – f a , w b – f b ) + макс. (f a , f b ) + 1 | w c = макс. (w a , w b , w int ) |
Дробная длина | f a | f b | f c = макс. (f a , f b ) | f c = min (f a , f b ) |
Наклон | S a (2-fa при использовании масштабирования двоичной точки) | S b (2-fb при использовании масштабирования двоичной точки) | S c = min (S a , S b ) | S c = макс. (S a , S b ) |
Смещение | B a (0 при использовании масштабирования двоичной точки) | B b (0 при использовании масштабирования двоичной точки) | B c = 0 | B c = B a + B b для сложения или B c = B a – B b для вычитания |
По умолчанию, графики, которые используют MATLAB в качестве умножения поддержки языка действия только на данных фиксированной точки, заданных посредством масштабирования двоичной точки. Если любой операнд является номером фиксированной точки со знаком, то результат также подписывается. Продукт полной точности требует размера слова, равного сумме размеров слова операндов. Дробная длина продукта является суммой дробных длин операндов. Выполнять умножение на данных фиксированной точки задало или при помощи наклона, который не является целочисленной степенью двойки или ненулевым смещением, задайте объект fimath
графика с набором ProductMode
к SpecifyPrecision
.
Графики, которые используют C в качестве умножения поддержки языка действия только на операндах данных фиксированной точки, заданных ненулевыми смещениями. Результатом является номер фиксированной точки со знаком, только если подписываются оба операнда. Смешивание подписанных и операндов без знака может привести к неожиданным результатам и не рекомендуется. Наклон продукта является продуктом наклонов операндов.
a | b | MATLAB как язык действия | C как язык действия | |
---|---|---|---|---|
Знак | s a | s b | s c = s a || s b | s c = s a
&&
s b |
Размер слова | w a | w b | w c = w a + w b | w c = макс. (w a , w b , w int ) |
Дробная длина | f a | f b | f c = f a + f b | f c = f a + f b |
Наклон | S a (2-fa при использовании масштабирования двоичной точки) | S b (2-fb при использовании масштабирования двоичной точки) | S c = S a S b | S c = S a S b |
Смещение | B a = 0 | B b = 0 | B c = 0 | B c = 0 |
Графики, которые используют MATLAB в качестве деления поддержки языка действия только на данных фиксированной точки, заданных посредством масштабирования двоичной точки. Если любой операнд является номером фиксированной точки со знаком, то результат также подписывается. Частное полной точности требует размера слова, равного максимальному количеству битов в операндах. Дробная длина частного является различием дробных длин операндов.
Графики, которые используют C в качестве деления поддержки языка действия для операндов данных фиксированной точки, заданных ненулевыми смещениями. Результатом является номер фиксированной точки со знаком, только если подписываются оба операнда. Смешивание подписанных и операндов без знака может привести к неожиданным результатам и не рекомендуется. Наклон частного является частным наклонов операндов.
a | b | MATLAB как язык действия | C как язык действия | |
---|---|---|---|---|
Знак | s a | s b | s c = s a || s b | s c = s a
&&
s b |
Размер слова | w a | w b | w c = макс. (w a , w b ) | w c = макс. (w a , w b , w int ) |
Дробная длина | f a | f b | f c = f a – f b | f c = f a – f b |
Наклон | S a (2-fa при использовании масштабирования двоичной точки) | S b (2-fb при использовании масштабирования двоичной точки) | S c = S a /Sb | S c = S a /Sb |
Смещение | B a = 0 | B b = 0 | B c = 0 | B c = 0 |
Единственная унарная операция, которая требует продвижения ее типа результата, является унарным минус операция c = -a
. Взятие отрицания номера фиксированной точки без знака может привести к неожиданным результатам и не рекомендуется. Размер слова результата зависит от свойства языка действия графика. Наклон результата равен наклону операнда. Смещение типа результата является отрицанием смещения операнда.
a | MATLAB как язык действия | C как язык действия | |
---|---|---|---|
Знак | s a | s c = s a | s c = s a |
Размер слова | w a | w c = w a | w c = макс. (w a , w int ) |
Дробная длина | f a | f c = f a | f c = f a |
Наклон | S a (2-fa при использовании масштабирования двоичной точки) | S c = S a | S c = S a |
Смещение | B a (0 при использовании масштабирования двоичной точки) | B c = –Ba | B c = –Ba |
Эта таблица суммирует правила продвижения фиксированной точки для бинарной операции между номером фиксированной точки и операндом различного числового типа.
Числовой тип второго операнда | MATLAB как язык действия | C как язык действия |
---|---|---|
Числа с плавающей запятой:
| Прежде, чем выполнить операцию, график бросает операнд с плавающей точкой к номеру фиксированной точки. Тип, используемый для броска, зависит от операции:
Результатом операции является номер фиксированной точки. | Прежде, чем выполнить операцию, график бросает операнд фиксированной точки к числу с плавающей запятой. Операция кастинга использует тот же тип ( |
Целые числа:
| Целочисленный операнд обработан как количество фиксированной точки того же размера слова и со знаком с наклонным S = 1 и смещение B = 0. Результатом операции является номер фиксированной точки. | Целочисленный операнд обработан как количество фиксированной точки того же размера слова и со знаком с наклонным S = 1 и смещение B = 0. Результатом операции является номер фиксированной точки. |