fi
オブジェクトのキャスト
代入による上書き
MATLAB® ソフトウェアは型宣言がないため、A = B
のような代入によって A
の型と内容が B
の型と内容によって置き換えられます。代入時に A
がない場合は、MATLAB が変数 A
を作成し、B
と同じ型と値を代入します。このような代入は、fi
、double
、single
、int8
、uint8
、int16
など、オブジェクトと組み込みの型も含む MATLAB のすべての型で発生します。
たとえば、次のコードは A
の値と int8
型を B
の値と int16
型で上書きします。
A = int8(0); B = int16(32767); A = B
A = int16 32767
class(A)
ans = 'int16'
MATLAB ソフトウェアでキャストする方法
たとえば、アキュムレータのデータをメモリにキャストする場合に、データを別の型にキャストすると便利です。MATLAB でデータをキャストする方法はいくつかあります。以下の節では、以下の 4 つの方法の例を示します。
添字を使用した代入によるキャスト
変換関数によるキャスト
Fixed-Point Designer™ の関数
reinterpretcast
によるキャスト関数
cast
によるキャスト
添字を使用した代入によるキャスト
次の添字を使用した代入ステートメントは A
の型を維持し、B
の値を int8
に飽和します。
A = int8(0); B = int16(32767); A(:) = B
A = int8 127
class(A)
ans = 'int8'
fi
オブジェクトについても同様です。
fipref('NumericTypeDisplay', 'short'); A = fi(0, 1, 8, 0); B = fi(32767, 1, 16, 0); A(:) = B
A = 127 numerictype(1,8,0)
メモ
添字を使用した代入の詳細は、関数 subsasgn
の説明を参照してください。
変換関数によるキャスト
変換関数を使用すると、データ型を変換できます。この例では、A
は上書きされるので事前に定義する必要がありません。
B = int16(32767); A = int8(B)
A = int8 127
class(A)
ans = 'int8'
fi
オブジェクトについても同様です。
B = fi(32767,1,16,0) A = fi(B,1,8,0)
B = 32767 numerictype(1,16,0) A = 127 numerictype(1,8,0)
fi
変換関数での numerictype
オブジェクトの使用
通常は、特定の numerictype
が多くの場所で使用されるので、変換関数で使用する numerictype
オブジェクトを事前に定義しておくと便利です。これらのオブジェクトの事前定義は、データ型の指定を 1 か所に置くという点でもよい方法です。
T8 = numerictype(1,8,0) T16 = numerictype(1,16,0)
T8 = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 8 FractionLength: 0 T16 = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 0
B = fi(32767,T16) A = fi(B,T8)
B = 32767 numerictype(1,16,0) A = 127 numerictype(1,8,0)
関数 reinterpretcast
によるキャスト
固定小数点データ型と組み込みデータ型は、基になるデータを変更せずに変換できます。Fixed-Point Designer の関数 reinterpretcast
はこのような変換を実行します。
次の例で、B
は、語長が 8 ビット、小数部の長さが 5 ビットの符号なし fi
オブジェクトです。関数 reinterpretcast
は B
を、語長が 8 ビット、小数部の長さが 1 ビットの符号付き fi
オブジェクト A
に変換します。A
と B
の実際値は異なりますが、2 進数表現は同じです。
B = fi([pi/4 1 pi/2 4],0,8,5) T = numerictype(1,8,1); A = reinterpretcast(B,T)
B = 0.7813 1.0000 1.5625 4.0000 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 8 FractionLength: 5 A = 12.5000 16.0000 25.0000 -64.0000 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 8 FractionLength: 1
基になるデータが変更されていないことを確認するには、A
と B
の 2 進数表現を比較します。
binary_B = bin(B) binary_A = bin(A)
binary_B = '00011001 00100000 00110010 10000000' binary_A = '00011001 00100000 00110010 10000000'
関数 cast によるキャスト
関数 cast
を使用して、変数の値を別の変数と同じ numerictype
、実数/複素数および fimath
に変換できます。
次の例では、a
が b
のデータ型にキャストされています。出力 c
は b
と同じ numerictype
と fimath
プロパティをもち、また a
と同じ値をもちます。
a = pi; b = fi([],1,16,13,'RoundingMethod','Floor'); c = cast(a,'like',b)
c = 3.1415 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13 RoundingMethod: Floor OverflowAction: Saturate ProductMode: FullPrecision SumMode: FullPrecision
この構文を使用することで、手動による固定小数点の変換のベスト プラクティスで説明されているように、データ型をアルゴリズム コードとは別に指定できます。
参考
cast
| fi
| numerictype
| reinterpretcast
| subsasgn