Абсолютное значение объекта 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. Объект c вывода fi имеет тот же локальный fimath как a.
c = abs(a,T) возвращает объект fi со значением, равным абсолютному значению объекта a и numerictype T. Промежуточные количества вычисляются с помощью fimath, сопоставленного с a, и объект c вывода fi имеет тот же локальный fimath как a. См. Правила Распространения Типа данных.
c = abs(a,F) возвращает объект fi со значением, равным абсолютному значению a и того же объекта numerictype как a. Промежуточные количества вычисляются с помощью объекта fimath F. Объект c вывода fi не имеет никакого локального fimath.
c = abs(a,T,F) возвращает объект fi со значением, равным абсолютному значению a и объекта numerictype T. Промежуточные количества вычисляются с помощью объекта fimath F. Объект c вывода fi не имеет никакого локального fimath. См. Правила Распространения Типа данных.
Когда Signedness объекта T входа numerictype является 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 с помощью одного из следующих объектов:
F объекта fimath, если F задан в качестве аргумента.
fimath сопоставил с a, если F не задан в качестве аргумента.
Бросьте квадраты re и im к типам без знака, если вход подписывается.
Добавьте квадраты re и im с помощью одного из следующих объектов:
F объекта fimath, если F задан в качестве аргумента.
Объект fimath сопоставил с a, если F не задан в качестве аргумента.
Вычислите квадратный корень из суммы, вычисленной на шаге четыре использования функции sqrt со следующими дополнительными аргументами:
T объекта numerictype, если T задан, или объект numerictype a в противном случае.
F объекта fimath, если F задан, или объект fimath, сопоставленный с a в противном случае.
Шаг три предотвращает сумму квадратов действительных и мнимых компонентов от того, чтобы быть отрицательным. Это важно, потому что, если или re или im имеют максимальную отрицательную величину и свойство OverflowAction, установлен в wrap затем, ошибка произойдет при пущении квадратного корня на шаге пять.