Абсолютное значение fi объект
c = abs(a)
c = abs(a,T)
c = abs(a,F)
c = abs(a,T,F)
c = abs(a) возвращает абсолютное значение fi объект a с тем же numerictype возразите как a. Промежуточные количества вычисляются с помощью fimath сопоставленный с a. Выход fi объект c имеет тот же локальный fimath как a.
c = abs(a,T) возвращает fi объект со значением равняется абсолютному значению a и numerictype объект T. Промежуточные количества вычисляются с помощью fimath сопоставленный с a и выход fi объект c имеет тот же локальный fimath как a. См. правила распространения типа данных.
c = abs(a,F) возвращает fi объект со значением равняется абсолютному значению a и тот же numerictype возразите как a. Промежуточные количества вычисляются с помощью fimath объект F. Выход fi объект c не имеет никакого локального fimath.
c = abs(a,T,F) возвращает fi объект со значением равняется абсолютному значению a и numerictype объект T. Промежуточные количества вычисляются с помощью fimath объект F. Выход fi объект c не имеет никакого локального fimath. См. Правила Распространения Типа данных.
Когда Signedness из входа numerictype объект T Auto, abs функционируйте всегда возвращает Unsigned fi объект.
abs только поддержки fi объекты с [Наклонное Смещение] масштабирование, когда смещение является нулем и дробным наклоном, являются тем. abs не поддерживает комплексный fi объекты типа данных Boolean.
Когда объект a действительно и имеет тип данных со знаком, абсолютное значение наиболее отрицательной величины проблематично, поскольку это не является представимым. В этом случае абсолютное значение насыщает к самому положительному значению, представимому, по условию вводят если OverflowAction свойство установлено в saturate. Если OverflowAction wrap, абсолютное значение наиболее отрицательной величины не оказывает влияния.
Для синтаксисов, для которых вы задаете numerictype объект T, abs функция следует правилам распространения типа данных, перечисленным в следующей таблице. В общем случае эти правила могут быть получены в итоге, когда “типы данных с плавающей точкой распространены”. Это позволяет вам писать код, который может использоваться и с фиксированной точкой и с входными параметрами с плавающей точкой.
| Тип данных Входа fi Объект a | Тип данных numerictype объекта T | Тип данных Выхода c |
|---|---|---|
|
| Тип данных |
|
|
|
|
|
|
|
|
|
Любой |
|
|
Любой |
|
|
Следующий пример показывает различие между результатами абсолютного значения для наиболее отрицательной величины, представимой типом данных со знаком когда OverflowAction saturate или wrap.
P = fipref('NumericTypeDisplay','full',... 'FimathDisplay','full'); a = fi(-128) a = -128 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 8 abs(a) ans = 127.9961 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 8 a.OverflowAction = 'Wrap' a = -128 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 8 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision abs(a) ans = -128 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 8 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision
Следующий пример показывает различие между результатами абсолютного значения для комплексного и действительного fi входные параметры, которые имеют наиболее отрицательную величину, представимую типом данных со знаком когда OverflowAction wrap.
re = fi(-1,1,16,15)
re =
-1
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
im = fi(0,1,16,15)
im =
0
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
a = complex(re,im)
a =
-1
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
abs(a,re.numerictype,fimath('OverflowAction','Wrap'))
ans =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
abs(re,re.numerictype,fimath('OverflowAction','Wrap'))
ans =
-1
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
Следующий пример показывает, как задать numerictype и fimath объекты как дополнительные аргументы, чтобы управлять результатом abs функция для действительных входных параметров. Когда вы задаете fimath возразите в качестве аргумента, того fimath объект используется для расчета промежуточные количества и получившийся fi объект не имеет никакого локального fimath.
a = fi(-1,1,6,5,'OverflowAction','Wrap') a = -1 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 6 FractionLength: 5 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision abs(a) ans = -1 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 6 FractionLength: 5 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision f = fimath('OverflowAction','Saturate') f = RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision abs(a,f) ans = 0.9688 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 6 FractionLength: 5 t = numerictype(a.numerictype, 'Signed', false) t = DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 6 FractionLength: 5 abs(a,t,f) ans = 1 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 6 FractionLength: 5
Следующий пример показывает, как задать numerictype и fimath объекты как дополнительные аргументы, чтобы управлять результатом abs функция для комплексных входных параметров.
a = fi(-1-i,1,16,15,'OverflowAction','Wrap') a = -1.0000 - 1.0000i DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 15 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision t = numerictype(a.numerictype,'Signed',false) t = DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 16 FractionLength: 15 abs(a,t) ans = 1.4142 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 16 FractionLength: 15 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: FullPrecision SumMode: FullPrecision f = fimath('OverflowAction','Saturate','SumMode',... 'KeepLSB','SumWordLength',a.WordLength,... 'ProductMode','specifyprecision',... 'ProductWordLength',a.WordLength,... 'ProductFractionLength',a.FractionLength) f = RoundingMethod: Nearest OverflowAction: Saturate ProductMode: SpecifyPrecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: KeepLSB SumWordLength: 16 CastBeforeSum: true abs(a,t,f) ans = 1.4142 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 16 FractionLength: 15
Абсолютное значение y из действительного входа a определяется следующим образом:
y = a если a >= 0
y =-a если a < 0
Абсолютное значение y из комплексного входа a связан с его действительными и мнимыми частями можно следующим образом:
y = sqrt(real(a)*real(a) + imag(a)*imag(a))
abs функция вычисляет абсолютное значение комплексных входных параметров можно следующим образом:
Вычислите действительные и мнимые части a использование следующих уравнений:
re = real(a)
im = imag(a)
Вычислите квадраты re и im использование одного из следующих объектов:
fimath объект F если F задан в качестве аргумента.
fimath сопоставленный с a если F не задан в качестве аргумента.
Бросьте квадраты re и im к типам без знака, если вход подписывается.
Добавьте квадраты re и im использование одного из следующих объектов:
fimath объект F если F задан в качестве аргумента.
fimath объект сопоставлен с a если F не задан в качестве аргумента.
Вычислите квадратный корень из суммы, вычисленной на шаге четыре использования sqrt функция со следующими дополнительными аргументами:
numerictype объект T если T задан, или numerictype объект a в противном случае.
fimath объект F если F задан, или fimath объект сопоставлен с a в противном случае.
Шаг три предотвращает сумму квадратов действительных и мнимых компонентов от того, чтобы быть отрицательным. Это важно потому что если любой re или im имеет максимальную отрицательную величину и OverflowAction свойство установлено в wrap затем ошибка произойдет при пущении квадратного корня на шаге пять.