abs

Абсолютное значение 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

fi Fixed

fi Fixed

Тип данных numerictype объект T

fi ScaledDouble

fi Fixed

ScaledDouble со свойствами numerictype объект T

fi double

fi Fixed

fi double

fi single

fi Fixed

fi single

Любой fi тип данных

fi double

fi double

Любой fi тип данных

fi single

fi single

Примеры

Пример 1

Следующий пример показывает различие между результатами абсолютного значения для наиболее отрицательной величины, представимой типом данных со знаком когда 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

Пример 2

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

Пример 3

Следующий пример показывает, как задать 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

Пример 4

Следующий пример показывает, как задать 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 функция вычисляет абсолютное значение комплексных входных параметров можно следующим образом:

  1. Вычислите действительные и мнимые части a использование следующих уравнений:

    re = real(a)

    im = imag(a)

  2. Вычислите квадраты re и im использование одного из следующих объектов:

    • fimath объект F если F задан в качестве аргумента.

    • fimath сопоставленный с a если F не задан в качестве аргумента.

  3. Бросьте квадраты re и im к типам без знака, если вход подписывается.

  4. Добавьте квадраты re и im использование одного из следующих объектов:

    • fimath объект F если F задан в качестве аргумента.

    • fimath объект сопоставлен с a если F не задан в качестве аргумента.

  5. Вычислите квадратный корень из суммы, вычисленной на шаге четыре использования sqrt функция со следующими дополнительными аргументами:

    • numerictype объект T если T задан, или numerictype объект a в противном случае.

    • fimath объект F если F задан, или fimath объект сопоставлен с a в противном случае.

Примечание

Шаг три предотвращает сумму квадратов действительных и мнимых компонентов от того, чтобы быть отрицательным. Это важно потому что если любой re или im имеет максимальную отрицательную величину и OverflowAction свойство установлено в wrap затем ошибка произойдет при пущении квадратного корня на шаге пять.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Представлено до R2006a