Абсолютное значение объекта 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
затем, ошибка произойдет при пущении квадратного корня на шаге пять.