Операции фиксированной точки в диаграммах Stateflow

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

Арифметические операции для данных фиксированной точки

Общее уравнение для операции двоичной арифметики между операндами фиксированной точки

c = a <op> b
где a и b числа фиксированной точки и <op> относится к сложению, вычитанию, умножению или делению. Результатом операции является номер фиксированной точки c из формы

V cS cQ c + B c.

Фиксированная точка для c определяет наклонный S c, смещение B c, и количество битов раньше хранило квантованный целочисленный Q c. Для каждой арифметической операции эта таблица приводит значение квантованного целочисленного Q c в терминах значений операндов (a и b) и фиксированная точка для c.

ОперацияНаклон и масштабирование смещенияМасштабирование двоичной точки

Сложение

c = a+bQ c = вокруг ((S a/Sc) Q a + (S b/Sc) Q b + (B a + B bB c)/Sc)Q c = вокруг ((S a/Sc) Q a + (S b/Sc) Q b)

Вычитание

c = a-bQ c = вокруг ((S a/Sc) Q a – (S b/Sc) Q b – (B aB bB c)/Sc)Q c = вокруг ((S a/Sc) Q a – (S b/Sc) Q b)

Умножение

c = a*bQ c = вокруг ((S aS b/Sc) Q aQ b + (B aS b/Sc) Q a + (B bS a/Sc) Q b + (B aB bB c)/Sc)Q c = вокруг ((S aS b/Sc) Q aQ b)

Деление

c = a/bQ c = вокруг ((S aQ a + B a) / (S c(S bQ b + B b)) – (B c/Sc))Q c = вокруг ((S a/ (S bS c)) Q a/Qb)

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

Примечание

Результат арифметической операции зависит от метода округления, который вычисляет значение квантованного целочисленного Q c. Для получения дополнительной информации смотрите Операции Преобразования.

Реляционные операции для данных фиксированной точки

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

Например, предположите тот a и b представляйте реальное значение V = 2.2 в двух различных схемах кодирования фиксированной точки:

  • a номер фиксированной точки с наклонным S a = 0.3 и смещение B a = 0.1. Квантованное целое число для a :

    Q a = (VB a)/Sa = (2.2 – 0.1)/0.3 = 7.

  • b номер фиксированной точки с наклонным S b = 0.7 и смещение B b = 0.1. Квантованное целое число для b :

    Q b = (VB b)/Sb = (2.2 – 0.1)/0.7 = 3.

Чтобы сравнить эти значения, график сначала преобразует их в общую фиксированную точку с наклонным аккомпанементом S = 1.06811 · 10–5S 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 aQ a/Scomp = Q a(S a/Scomp) ≈ 7 ⨉ 28087 = 196609

Q b' = S bQ 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 когда его реальное приближение

V aS aQ a + B a = 0.25 ⨉ ( –20) + 5.1 = 0.1.

Правила продвижения для операций фиксированной точки

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

Правила продвижения фиксированной точки определяют тип результата для операции c = <op> b путем выбора наклонного S c, смещение B c, и количество битов wc используемый, чтобы сохранить квантованный целочисленный Q c. Эти параметры зависят от фиксированных точек операндов a и b, операция <op> выполняться, и свойство языка действия для графика.

  • В графике, который использует MATLAB в качестве языка действия, вы управляете правилами продвижения фиксированной точки через свойства фиксированной точки для графика. Смотрите Свойства Фиксированной точки.

    • Если вы устанавливаете fimath MATLAB Chart свойство к 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: = <op> b. Специальная операция присвоения не следует правилам продвижения фиксированной точки. Вместо этого график определяет результат операции при помощи типа, который вы задаете для c. Смотрите продвижение фиксированной точки переопределения в графиках C.

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

По умолчанию, графики, которые используют MATLAB в качестве сложения поддержки языка действия и вычитания только на данных фиксированной точки, заданных посредством масштабирования двоичной точки. Если любой операнд является номером фиксированной точки со знаком, то результат также подписывается. Выбор размера слова вмещает целочисленные и дробные части каждого операнда в дополнение к возможному биту переноса. Дробная длина результата равна дробной длине самого точного операнда. Выполнять сложение и вычитание на данных фиксированной точки задало или при помощи наклона, который не является целочисленной степенью двойки или ненулевым смещением, задайте график fimath объект с SumMode установите на SpecifyPrecision.

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

 abMATLAB как язык действияC как язык действия
Знакs as bs c = s a||s bs c = s a && s b
Размер словаw aw bw c = макс. (w af a, w bf b) + макс. (f a, f b) + 1w c = макс. (w a, w b, w int)
Дробная длинаf af bфК = макс. (f a, f b)фК = 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 = 0B c = B a + B b для сложения или B c = B aB b для вычитания

Умножение

По умолчанию, графики, которые используют MATLAB в качестве умножения поддержки языка действия только на данных фиксированной точки, заданных посредством масштабирования двоичной точки. Если любой операнд является номером фиксированной точки со знаком, то результат также подписывается. Продукт полной точности требует размера слова, равного сумме размеров слова операндов. Дробная длина продукта является суммой дробных длин операндов. Выполнять умножение на данных фиксированной точки задало или при помощи наклона, который не является целочисленной степенью двойки или ненулевым смещением, задайте график fimath объект с ProductMode установите на SpecifyPrecision.

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

 abMATLAB как язык действияC как язык действия
Знакs as bs c = s a||s bs c = s a && s b
Размер словаw aw bw c = w a + w bw c = макс. (w a, w b, w int)
Дробная длинаf af bфК = f a + f bфК = f a + f b
НаклонS a (2-fa при использовании масштабирования двоичной точки)S b (2-fb при использовании масштабирования двоичной точки)S c = S aS bS c = S aS b
СмещениеB a = 0B b = 0B c = 0B c = 0

Деление

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

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

 abMATLAB как язык действияC как язык действия
Знакs as bs c = s a||s bs c = s a && s b
Размер словаw aw bw c = макс. (w a, w b)w c = макс. (w a, w b, w int)
Дробная длинаf af bфК = f af bфК = f af b
НаклонS a (2-fa при использовании масштабирования двоичной точки)S b (2-fb при использовании масштабирования двоичной точки)S c = S a/SbS c = S a/Sb
СмещениеB a = 0B b = 0B c = 0B c = 0

Унарный минус

Единственная унарная операция, которая требует продвижения ее типа результата, является унарным минус операция c = -a. Взятие отрицания номера фиксированной точки без знака может привести к неожиданным результатам и не рекомендуется. Размер слова результата зависит от свойства языка действия графика. Наклон результата равен наклону операнда. Смещение типа результата является отрицанием смещения операнда.

 aMATLAB как язык действияC как язык действия
Знакs as c = s as c = s a
Размер словаw aw c = w aw c = макс. (w a, w int)
Дробная длинаf aфК = f aфК = f a
НаклонS a (2-fa при использовании масштабирования двоичной точки)S c = S aS c = S a
СмещениеB a (0 при использовании масштабирования двоичной точки)B c = –BaB c = –Ba

Арифметика со смешанными числовыми типами

Эта таблица суммирует правила продвижения фиксированной точки для бинарной операции между номером фиксированной точки и операндом различного числового типа.

Числовой тип второго операндаMATLAB как язык действияC как язык действия

Числа с плавающей запятой:

  • single

  • double

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

  • Операции сложения и операции вычитания используют тот же тип в качестве операнда фиксированной точки.

  • Операции умножения используют тот же размер слова и со знаком как операнд фиксированной точки и лучшая длина части точности для результата фиксированной точки.

Результатом операции является номер фиксированной точки.

Прежде, чем выполнить операцию, график бросает операнд фиксированной точки к числу с плавающей запятой. Операция кастинга использует тот же тип (single или double) как операнд с плавающей точкой. Результатом операции является число с плавающей запятой.

Целые числа:

  • int64

  • int32

  • int16

  • int8

  • uint64

  • uint32

  • uint16

  • uint8

Целочисленный операнд обработан как количество фиксированной точки того же размера слова и со знаком с наклонным S = 1 и смещение B = 0. Результатом операции является номер фиксированной точки.

Целочисленный операнд обработан как количество фиксированной точки того же размера слова и со знаком с наклонным S = 1 и смещение B = 0. Результатом операции является номер фиксированной точки.

Похожие темы