Main Content

abs

fi オブジェクトの絶対値

説明

y = abs(a) は、a と同じ numerictype オブジェクトをもつ、fi オブジェクト a の絶対値を返します。a に関連付けられた fimath を使用して、中間量が計算されます。出力 fi オブジェクト ya と同じローカル fimath をもちます。

y = abs(a,T) は、a の絶対値に等しい値および numerictype オブジェクト T をもつ fi オブジェクトを返します。a に関連付けられた fimath を使用して、中間量が計算されます。出力 fi オブジェクト ya と同じローカル fimath をもちます。データ型の伝播ルールを参照してください。

y = abs(a,F) は、a の絶対値に等しい値および a と同じ numerictype オブジェクトをもつ fi オブジェクトを返します。fimath オブジェクト F を使用して、中間量が計算されます。出力 fi オブジェクト y はローカル fimath をもちません。

y = abs(a,T,F) は、a の絶対値に等しい値および numerictype オブジェクト T をもつ fi オブジェクトを返します。fimath オブジェクト F を使用して、中間量が計算されます。出力 fi オブジェクト y はローカル fimath をもちません。データ型の伝播ルールを参照してください。

すべて折りたたむ

この例では、'OverflowAction' プロパティが 'Saturate' または 'Wrap' に設定されている場合の符号付きデータ型で表現可能な最小の負の値の絶対値について結果の違いを示します。

'OverflowAction' が設定値 'Saturate' に設定されている場合の絶対値を計算します。

P = fipref('NumericTypeDisplay','full',...
           'FimathDisplay','full');
a = fi(-128)
y = abs(a)
a = 

  -128

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 8

y = 

  127.9961

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 8

abs は、最大の正の値に飽和した結果である 127.9961 を返します。

'OverflowAction''Wrap' に設定されている場合の絶対値を計算します。

a.OverflowAction = 'Wrap'
y = abs(a)
a = 

  -128

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 8

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

y = 

  -128

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 8

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

abs は、最小の負の値に戻した結果である 128 を返します。

この例では、'OverflowAction' プロパティが 'Wrap' に設定されている場合の符号付きデータ型で表現可能な最小の負の値をもつ、複素数および実数 fi 入力の絶対値の結果の違いを示します。

複素数 fi オブジェクトを定義します。

re = fi(-1,1,16,15);
im = fi(0,1,16,15);
a = complex(re,im)
a = 

  -1.0000 + 0.0000i

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

a は複素数ですが、実数部 re と数値的に等価です。

複素数 fi オブジェクトの絶対値を計算します。

y = abs(a,re.numerictype,fimath('OverflowAction','Wrap'))
y = 

    1.0000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

実数 fi オブジェクトの絶対値を計算します。

y = abs(re,re.numerictype,fimath('OverflowAction','Wrap'))
y = 

    -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');
y = abs(a)
y = 

    -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');
y = abs(a,F)
y = 

    0.9688

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 6
        FractionLength: 5

返された fi オブジェクトは値 0.9688 に飽和されており、入力と同じ numerictype オブジェクトをもちます。

abs の出力は常に正でなければならないため、出力のために符号なし numerictype を指定できます。

T = numerictype(a.numerictype, 'Signed', false);
y = abs(a,T,F)
y = 

     1

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 6
        FractionLength: 5

符号なし numerictype を指定すると精度を向上できます。

この例では、numerictype および fimath オブジェクトを、複素数入力の関数 abs の結果を制御するオプション引数として指定する方法を示します。

numerictype 入力を指定し、a の絶対値を計算します。

a = fi(-1-i,1,16,15,'OverflowAction','Wrap');
T = numerictype(a.numerictype,'Signed',false);
y = abs(a,T)
y = 

    1.4142

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 15

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

1.4142 と指定された符号なし numerictype をもつ fi オブジェクトが返されます。中間計算に使用される fimath および出力の fimath は入力のものと同じです。

次に、a のものとは異なる fimath オブジェクトを指定します。

F = fimath('OverflowAction','Saturate','SumMode',...
        'KeepLSB','SumWordLength',a.WordLength,...
        'ProductMode','specifyprecision',...
        'ProductWordLength',a.WordLength,...
        'ProductFractionLength',a.FractionLength);
y = abs(a,T,F)
y = 

    1.4142

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 15

指定した fimath オブジェクトが中間計算に使用されます。出力に関連付けられている fimath は既定の fimath です。

入力引数

すべて折りたたむ

入力 fi 配列。スカラー、ベクトル、行列または多次元配列として指定します。

abs は、[勾配 バイアス] スケーリングが自明な fi オブジェクト (バイアスが 0、小数部の勾配が 1 の場合) のみをサポートします。

abs では、実数と複素数の入力に対して異なるアルゴリズムが使用されます。詳細については、絶対値を参照してください。

データ型: fi
複素数のサポート: あり

出力 fi オブジェクト ynumerictypenumerictype オブジェクトとして指定します。詳細については、データ型の伝播ルールを参照してください。

例: T = numerictype(0,24,12,'DataType','Fixed')

絶対値の計算に使用する固定小数点の算術設定。fimath オブジェクトとして指定します。

例: F = fimath('OverflowAction','Saturate','RoundingMethod','Convergent')

アルゴリズム

すべて折りたたむ

絶対値

実数の絶対値は、符号を除いた非負の対応する値です。

実数入力 a の絶対値 y は次のようになります。

y = a (a >= 0(1)
y = -a (a < 0(2)

abs(-0)0 を返します。

メモ

fi オブジェクト a が実数であり符号付きデータ型をもつ場合、最小の負の値の絶対値は表現不可能であるため、問題があります。'OverflowAction' プロパティが 'Saturate' に設定されている場合、絶対値は、このデータ型により表現可能な最大の正の値に飽和されます。'OverflowAction''Wrap' である場合、最小の負の値の絶対値は効果がありません。

複素数入力 a の絶対値 y は、次のように、実数部と虚数部に関連付けられます。

y = sqrt(real(a)*real(a) + imag(a)*imag(a)) (3)

関数 abs は、次のように、複素数入力 a の絶対値を計算します。

  1. a の実数部と虚数部を計算します。

    re = real(a)(4)
    im = imag(a)(5)

  2. 次のオブジェクトのいずれかを使用し、re および im の二乗を計算します。

    • F が引数として指定されている場合は、fimath オブジェクト F

    • F が引数として指定されていない場合は、a に関連付けられている fimath

  3. 入力が符号付きである場合、re および im の二乗を符号なし型にキャストします。

  4. 次のオブジェクトのいずれかを使用し、re および im の二乗を加算します。

    • F が引数として指定されている場合は、fimath オブジェクト F

    • F が引数として指定されていない場合は、a に関連付けられている fimath オブジェクト。

  5. 関数 sqrt および次の追加引数を使用し、手順 4 で計算された加算の平方根を計算します。

    • T が指定されている場合は、numerictype オブジェクト T。指定されていない場合は、anumerictype オブジェクト。

    • F が指定されている場合は、fimath オブジェクト F。指定されていない場合は、a に関連付けられている fimath オブジェクト。

メモ

手順 3 により、実数部および虚数部の二乗和が負になることが回避されます。re または im のどちらかが最大の負の値をもち、'OverflowAction' プロパティが 'Wrap' に設定されている場合、手順 5 で平方根を取得するときにエラーが発生するため、この処理は非常に重要です。

データ型の伝播ルール

構文で numerictype オブジェクト T を指定した場合、関数 abs は次の表に示すデータ型の伝播ルールに従います。一般にこれらのルールを要約すると、"浮動小数点データ型は伝播する" になります。このため、固定小数点と浮動小数点の両方の入力に使用できるコードを書くことができます。

入力 fi オブジェクト a のデータ型numerictype オブジェクト T のデータ型出力 y のデータ型

fi Fixed

fi Fixed

numerictype オブジェクト T のデータ型

fi ScaledDouble

fi Fixed

numerictype オブジェクト T のプロパティをもつ ScaledDouble

fi double

fi Fixed

fi double

fi single

fi Fixed

fi single

任意の fi データ型

fi double

fi double

任意の fi データ型

fi single

fi single

メモ

入力 numerictype オブジェクト TSignednessAuto である場合、関数 abs は必ず Unsigned fi オブジェクトを返します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入