abs
fi オブジェクトの絶対値
説明
は、y = abs(a)a と同じ numerictype オブジェクトをもつ、fi オブジェクト a の絶対値を返します。a に関連付けられた fimath を使用して、中間量が計算されます。出力 fi オブジェクト y は a と同じローカル fimath をもちます。
は、y = abs(a,T)a の絶対値に等しい値および numerictype オブジェクト T をもつ fi オブジェクトを返します。a に関連付けられた fimath を使用して、中間量が計算されます。出力 fi オブジェクト y は a と同じローカル 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: 8abs は、最大の正の値に飽和した結果である 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: FullPrecisionabs は、最小の負の値に戻した結果である 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: 15a は複素数ですが、実数部 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 オブジェクト y の numerictype。numerictype オブジェクトとして指定します。詳細については、データ型の伝播ルールを参照してください。
例: 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 の絶対値を計算します。
aの実数部と虚数部を計算します。re = real(a)(4) im = imag(a)(5) 次のオブジェクトのいずれかを使用し、
reおよびimの二乗を計算します。Fが引数として指定されている場合は、fimathオブジェクトF。Fが引数として指定されていない場合は、aに関連付けられているfimath。
入力が符号付きである場合、
reおよびimの二乗を符号なし型にキャストします。次のオブジェクトのいずれかを使用し、
reおよびimの二乗を加算します。Fが引数として指定されている場合は、fimathオブジェクトF。Fが引数として指定されていない場合は、aに関連付けられているfimathオブジェクト。
関数
sqrtおよび次の追加引数を使用し、手順 4 で計算された加算の平方根を計算します。Tが指定されている場合は、numerictypeオブジェクトT。指定されていない場合は、aのnumerictypeオブジェクト。Fが指定されている場合は、fimathオブジェクトF。指定されていない場合は、aに関連付けられているfimathオブジェクト。
メモ
手順 3 により、実数部および虚数部の二乗和が負になることが回避されます。re または im のどちらかが最大の負の値をもち、'OverflowAction' プロパティが 'Wrap' に設定されている場合、手順 5 で平方根を取得するときにエラーが発生するため、この処理は非常に重要です。
構文で numerictype オブジェクト T を指定した場合、関数 abs は次の表に示すデータ型の伝播ルールに従います。一般にこれらのルールを要約すると、"浮動小数点データ型は伝播する" になります。このため、固定小数点と浮動小数点の両方の入力に使用できるコードを書くことができます。
入力 fi オブジェクト a のデータ型 | numerictype オブジェクト T のデータ型 | 出力 y のデータ型 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
任意の |
|
|
任意の |
|
|
メモ
入力 numerictype オブジェクト T の Signedness が Auto である場合、関数 abs は必ず Unsigned fi オブジェクトを返します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
double データ型および複素数データ型はサポートされていません。
バージョン履歴
R2006a より前に導入
参考
fi | fimath | numerictype
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)