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: 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
を返します。
実数および複素数 fi
入力の絶対値の違い
この例では、'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
の結果を制御
この例では、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
および 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
です。
入力引数
a
— 入力 fi
配列
スカラー | ベクトル | 行列 | 多次元配列
入力 fi
配列。スカラー、ベクトル、行列または多次元配列として指定します。
abs
は、[勾配 バイアス] スケーリングが自明な fi
オブジェクト (バイアスが 0
、小数部の勾配が 1
の場合) のみをサポートします。
abs
では、実数と複素数の入力に対して異なるアルゴリズムが使用されます。詳細については、絶対値を参照してください。
データ型: fi
複素数のサポート: あり
T
— 出力の numerictype
numerictype
オブジェクト
出力 fi
オブジェクト y
の numerictype
。numerictype
オブジェクトとして指定します。詳細については、データ型の伝播ルールを参照してください。
例: T = numerictype(0,24,12,'DataType','Fixed')
F
— 使用する固定小数点の算術設定
fimath
オブジェクト
絶対値の計算に使用する固定小数点の算術設定。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++ コードを生成します。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
double データ型および複素数データ型はサポートされていません。
バージョン履歴
R2006a より前に導入
参考
fi
| fimath
| numerictype
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)