メインコンテンツ

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')

アルゴリズム

すべて折りたたむ

拡張機能

すべて展開する

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

バージョン履歴

R2006a より前に導入