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