exponenta event banner

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

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

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

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

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

VcСcQc + Bc.

Тип фиксированной точки для c определяет уклон Sc, смещение Bcи количество битов, используемых для хранения квантованного целого числа Qc. Для каждой арифметической операции эта таблица перечисляет значение квантованного целого числа Qc по значениям операндов (a и b) и тип фиксированной точки для c.

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

Дополнение

c = a+bQc = раунд ((Sa/ Sc) Qa + (Sb/ Sc) Qb + (Ba + Bb - Bc)/Sc)Qc = раунд ((Sa/ Sc) Qa + (Sb/ Sc) Qb)

Вычитание

c = a-bQc = раунд ((Sa/ Sc) Qa - (Sb/ Sc) Qb - (Ba - Bb - Bc)/Sc)Qc = раунд ((Sa/ Sc) Qa - (Sb/ Sc) Qb)

Умножение

c = a*bQc = раунд ((SaSb/ Sc) QaQb + (BaSb/ Sc) Qa + (BbSa/ Sc) Qb + (BaBb - Bc)/Sc)Qc = раунд ((SaSb/ Sc) QaQb)

Подразделение

c = a/bQc = раунд ((SaQa + Ba)/( Sc(SbQb + Bb)) - (Bc/ Sc))Qc = раунд ((Sa/ (SbSc)) Qa/ Qb)

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

Примечание

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

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

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

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

  • a - номер фиксированной точки с уклоном Sa = 0,3 и смещение Ba = 0.1. Квантованное целое число для a является:

    Qa = (V - Ba)/Sa = (2.2 – 0.1)/0.3 = 7.

  • b - номер фиксированной точки с уклоном Sb = 0,7 и смещение Bb = 0.1. Квантованное целое число для b является:

    Qb = (V - Bb)/Sb = (2.2 – 0.1)/0.7 = 3.

Для сравнения этих значений диаграмма сначала преобразует их в общий тип фиксированной точки с уклоном Scomp = 1.06811· 10-5 ≈ Sa/ 28087 ≈ Sb · 2-16 и смещение Bcomp = 0,1. (В этом случае наклон Скомп возникает из приблизительного значения Sa/ Sb = 0.3/0.7 ≈ 28087 · 2–16.) В этой общей схеме кодирования a и b соответствуют этим квантованным целым числам:

Qa' = SaQa/ Scomp = Qa(Sa/Scomp) ≈ 7 ⨉ 28087 = 196609

Qb' = SbQb/ Scomp = Qb(Sb/ 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 - число с фиксированной точкой с наклоном Sa = 0,25 и смещение Ba = 5.1. Используя a в логической операции эквивалентно проверке, является ли квантованное целое число Qa удовлетворяет условию

Qa = раунд ((0 - Ba)/Sa) = раунд (-5,1/0,25) = раунд (-20,4) = -20.

Поэтому a эквивалентно false когда его реальное приближение

VaСaQa + Ba = 0.25 ⨉ ( –20) + 5.1 = 0.1.

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

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

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

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

    • При установке диаграммы MATLAB fimath свойство для Same as MATLAB, затем арифметические операции следуют правилам продвижения с фиксированной точкой по умолчанию для MATLAB. См. раздел Выполнение арифметики фиксированных точек (конструктор фиксированных точек).

    • При указании диаграммы fimath объект с SumMode и ProductMode установить в значение SpecifyPrecision, то можно определить длину слова, наклон и смещение для всех сумм и продуктов явным образом. См. раздел Свойства объекта Fimath (Конструктор фиксированных точек).

  • На диаграмме, использующей C в качестве языка действий, правила продвижения с фиксированной точкой определяют тип промежуточного значения результата. Это промежуточное значение затем приводится к типу, указанному для c.

    Для всех арифметических операций количество битов по умолчанию wc используется для хранения квантованного целого числа является большим значением между:

    • Максимальное количество битов в типах операндов (wa и wb).

    • Количество битов в целочисленном размере слова для целевого компьютера (wint).

    Установка значения wintоткройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters). На панели «Внедрение оборудования» выберите Custom Processor в раскрывающемся списке Поставщик устройства и введите целевой размер целого слова в поле int. Дополнительные сведения см. в разделе Панель реализации оборудования (Simulink).

    Можно избежать переполнения и повысить точность операций с плавающей запятой с помощью операции специального назначения формы c := a <op> b. Операция специального назначения не соответствует правилам рекламного мероприятия с фиксированной точкой. Вместо этого диаграмма определяет результат операции, используя тип, указанный для c. См. раздел Переопределение продвижения с фиксированной точкой в диаграммах C.

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

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

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

 abMATLAB как язык действийC как язык действий
Знакsasbsc = sa||sbsc = sa && sb
Длина словаwawbwc = max (wa - fa, wb - fb) + max (fa, fb) + 1wc = max (wa, wb, wint)
Длина фракцииfafbfc = max (fa, fb)fc = мин (fa, fb)
НаклонSa (2-fa, если используется двоичное масштабирование)Sb (2-fb, если используется двоичное масштабирование)Sc = мин (Sa, Sb)Sc = max (Sa, Sb)
УклонBa (0, если используется двоичное масштабирование)Bb (0, если используется двоичное масштабирование)Bc = 0Bc = Ba + Bb для добавления или Bc = Ba - Bb для вычитания

Умножение

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

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

 abMATLAB как язык действийC как язык действий
Знакsasbsc = sa||sbsc = sa && sb
Длина словаwawbwc = wa + wbwc = max (wa, wb, wint)
Длина фракцииfafbfc = fa + fbfc = fa + fb
НаклонSa (2-fa, если используется двоичное масштабирование)Sb (2-fb, если используется двоичное масштабирование)Sc = SaSbSc = SaSb
УклонBa = 0Bb = 0Bc = 0Bc = 0

Подразделение

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

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

 abMATLAB как язык действийC как язык действий
Знакsasbsc = sa||sbsc = sa && sb
Длина словаwawbwc = max (wa, wb)wc = max (wa, wb, wint)
Длина фракцииfafbfc = fa - fbfc = fa - fb
НаклонSa (2-fa, если используется двоичное масштабирование)Sb (2-fb, если используется двоичное масштабирование)Sc = Sa/ SbSc = Sa/ Sb
УклонBa = 0Bb = 0Bc = 0Bc = 0

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

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

 aMATLAB как язык действийC как язык действий
Знакsasc = sasc = sa
Длина словаwawc = wawc = max (wa, wint)
Длина фракцииfafc = fafc = fa
НаклонSa (2-fa, если используется двоичное масштабирование)Sc = SaSc = Sa
УклонBa (0, если используется двоичное масштабирование)Bc = -BaBc = -Ba

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

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

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

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

  • single

  • double

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

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

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

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

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

Целые числа:

  • int64

  • int32

  • int16

  • int8

  • uint64

  • uint32

  • uint16

  • uint8

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

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

Связанные темы