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. Объект 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

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 с помощью одного из следующих объектов:

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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