Числа с фиксированной точкой используют целые числа и целочисленную арифметику для аппроксимации вещественных чисел. Они позволяют выполнять вычисления с использованием реальных чисел, не требуя поддержки с плавающей запятой в базовом оборудовании системы. Дополнительные сведения см. в разделе Фиксированные данные в диаграммах потока состояний.
Общее уравнение для двоичной арифметической операции между операндами с фиксированной точкой
c = a <op> b
a и b являются числами с фиксированной точкой и <op> относится к сложению, вычитанию, умножению или делению. Результатом операции является число с фиксированной точкой c формы
Vc ≈ СcQc + Bc.
Тип фиксированной точки для c определяет уклон Sc, смещение Bcи количество битов, используемых для хранения квантованного целого числа Qc. Для каждой арифметической операции эта таблица перечисляет значение квантованного целого числа Qc по значениям операндов (a и b) и тип фиксированной точки для c.
| Операция | Масштабирование уклона и смещения | Двоичное масштабирование | |
|---|---|---|---|
Дополнение | c = a+b | Qc = раунд ((Sa/ Sc) Qa + (Sb/ Sc) Qb + (Ba + Bb - Bc)/Sc) | Qc = раунд ((Sa/ Sc) Qa + (Sb/ Sc) Qb) |
Вычитание | c = a-b | Qc = раунд ((Sa/ Sc) Qa - (Sb/ Sc) Qb - (Ba - Bb - Bc)/Sc) | Qc = раунд ((Sa/ Sc) Qa - (Sb/ Sc) Qb) |
Умножение | c = a*b | Qc = раунд ((SaSb/ Sc) QaQb + (BaSb/ Sc) Qa + (BbSa/ Sc) Qb + (BaBb - Bc)/Sc) | Qc = раунд ((SaSb/ Sc) QaQb) |
Подразделение | c = a/b | Qc = раунд ((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 путем выбора уклона S<op> b c, смещение 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> bc. См. раздел Переопределение продвижения с фиксированной точкой в диаграммах C.
По умолчанию диаграммы, использующие MATLAB в качестве языка действий, поддерживают добавление и вычитание только для данных с фиксированной точкой, определенных с помощью двоичного масштабирования. Если любой операнд является подписанным числом с фиксированной точкой, то результат также подписывается. Выбор длины слова учитывает целые и дробные части каждого операнда в дополнение к возможному биту переноса. Длина дроби результата равна длине дроби наиболее точного операнда. Чтобы выполнить сложение и вычитание данных с фиксированной точкой, определенных с помощью уклона, который не является целочисленной степенью двух, или ненулевого смещения, укажите диаграмму fimath объект с SumMode установить в значение SpecifyPrecision.
Диаграммы, использующие C в качестве языка действий, поддерживают добавление и вычитание операндов всех типов данных с фиксированной точкой. Результатом является подписанное число с фиксированной точкой, только если оба операнда подписаны. Смешение подписанных и неподписанных операндов может привести к неожиданным результатам и не рекомендуется. Наклон результата равен наклону наименее точного операнда. Для упрощения вычислений и получения эффективного кода смещения двух входных сигналов добавляются для операции сложения и вычитаются для операции вычитания.
a | b | MATLAB как язык действий | C как язык действий | |
|---|---|---|---|---|
| Знак | sa | sb | sc = sa||sb | sc = sa
&&
sb |
| Длина слова | wa | wb | wc = max (wa - fa, wb - fb) + max (fa, fb) + 1 | wc = max (wa, wb, wint) |
| Длина фракции | fa | fb | fc = max (fa, fb) | fc = мин (fa, fb) |
| Наклон | Sa (2-fa, если используется двоичное масштабирование) | Sb (2-fb, если используется двоичное масштабирование) | Sc = мин (Sa, Sb) | Sc = max (Sa, Sb) |
| Уклон | Ba (0, если используется двоичное масштабирование) | Bb (0, если используется двоичное масштабирование) | Bc = 0 | Bc = Ba + Bb для добавления или Bc = Ba - Bb для вычитания |
По умолчанию диаграммы, использующие MATLAB в качестве языка действий, поддерживают умножение только для данных с фиксированной точкой, определенных с помощью двоичного масштабирования. Если любой операнд является подписанным числом с фиксированной точкой, то результат также подписывается. Для произведения полной точности требуется длина слова, равная сумме длин слов операндов. Длина дроби произведения - это сумма длин дроби операндов. Чтобы выполнить умножение данных с фиксированной точкой, определенных с помощью уклона, который не является целочисленной степенью двух, или ненулевого смещения, укажите диаграмму fimath объект с ProductMode установить в значение SpecifyPrecision.
Диаграммы, использующие C в качестве языка действий, поддерживают умножение только для операндов данных с фиксированной точкой, определенных ненулевыми смещениями. Результатом является подписанное число с фиксированной точкой, только если оба операнда подписаны. Смешение подписанных и неподписанных операндов может привести к неожиданным результатам и не рекомендуется. Наклон произведения - произведение наклонов операндов.
a | b | MATLAB как язык действий | C как язык действий | |
|---|---|---|---|---|
| Знак | sa | sb | sc = sa||sb | sc = sa
&&
sb |
| Длина слова | wa | wb | wc = wa + wb | wc = max (wa, wb, wint) |
| Длина фракции | fa | fb | fc = fa + fb | fc = fa + fb |
| Наклон | Sa (2-fa, если используется двоичное масштабирование) | Sb (2-fb, если используется двоичное масштабирование) | Sc = SaSb | Sc = SaSb |
| Уклон | Ba = 0 | Bb = 0 | Bc = 0 | Bc = 0 |
Диаграммы, использующие MATLAB в качестве раздела языка действий, поддерживают только данные с фиксированной точкой, определяемые с помощью бинарного масштабирования. Если любой операнд является подписанным числом с фиксированной точкой, то результат также подписывается. Частное полной точности требует длины слова, равной максимальному количеству битов в операндах. Длина дроби частного - это разность длин дроби операндов.
Диаграммы, использующие C в качестве раздела поддержки языка действий для операндов данных с фиксированной точкой, определенных ненулевыми смещениями. Результатом является подписанное число с фиксированной точкой, только если оба операнда подписаны. Смешение подписанных и неподписанных операндов может привести к неожиданным результатам и не рекомендуется. Наклон частного - это частное от наклонов операндов.
a | b | MATLAB как язык действий | C как язык действий | |
|---|---|---|---|---|
| Знак | sa | sb | sc = sa||sb | sc = sa
&&
sb |
| Длина слова | wa | wb | wc = max (wa, wb) | wc = max (wa, wb, wint) |
| Длина фракции | fa | fb | fc = fa - fb | fc = fa - fb |
| Наклон | Sa (2-fa, если используется двоичное масштабирование) | Sb (2-fb, если используется двоичное масштабирование) | Sc = Sa/ Sb | Sc = Sa/ Sb |
| Уклон | Ba = 0 | Bb = 0 | Bc = 0 | Bc = 0 |
Единственной унарной операцией, требующей повышения своего типа результата, является унарная операция минус c = -a. Принятие отрицательного значения для числа без знака с фиксированной точкой может привести к неожиданным результатам и не рекомендуется. Размер слова результата зависит от свойства языка действий диаграммы. Наклон результата равен наклону операнда. Смещение типа результата является отрицательным смещением операнда.
a | MATLAB как язык действий | C как язык действий | |
|---|---|---|---|
| Знак | sa | sc = sa | sc = sa |
| Длина слова | wa | wc = wa | wc = max (wa, wint) |
| Длина фракции | fa | fc = fa | fc = fa |
| Наклон | Sa (2-fa, если используется двоичное масштабирование) | Sc = Sa | Sc = Sa |
| Уклон | Ba (0, если используется двоичное масштабирование) | Bc = -Ba | Bc = -Ba |
В этой таблице приведены правила продвижения с фиксированной точкой для двоичной операции между числом с фиксированной точкой и операндом другого числового типа.
| Числовой тип второго операнда | MATLAB как язык действий | C как язык действий |
|---|---|---|
Числа с плавающей запятой:
| Перед выполнением операции диаграмма переводит операнд с плавающей запятой в число с фиксированной запятой. Тип, используемый для приведения, зависит от операции:
Результатом операции является число с фиксированной точкой. | Перед выполнением операции диаграмма переводит операнд с фиксированной запятой в число с плавающей запятой. Операция литья использует тот же тип ( |
Целые числа:
| Целочисленный операнд рассматривается как число с фиксированной точкой одинаковой длины слова и сигнатуры с наклоном S = 1 и смещением B = 0. Результатом операции является число с фиксированной точкой. | Целочисленный операнд рассматривается как число с фиксированной точкой одинаковой длины слова и сигнатуры с наклоном S = 1 и смещением B = 0. Результатом операции является число с фиксированной точкой. |