ドキュメンテーション

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fi オブジェクトのキャスト

代入による上書き

MATLAB® ソフトウェアは型宣言がないため、A = B のような代入によって A の型と内容が B の型と内容によって置き換えられます。代入時に A がない場合は、MATLAB が変数 A を作成し、B と同じ型と値を代入します。このような代入は、fidoublesingleint8uint8int16 など、オブジェクトと組み込みの型も含む MATLAB のすべての型で発生します。

たとえば、次のコードは A の値と int8 型を B の値と int16 型で上書きします。

A = int8(0);
B = int16(32767);
A = B 

A =

  32767

class(A) 

ans =

int16

MATLAB ソフトウェアでキャストする方法

たとえば、アキュムレータのデータをメモリにキャストする場合に、データを別の型にキャストすると便利です。MATLAB でデータをキャストする方法はいくつかあります。以下の節では、以下の 3 つの方法の例を示します。

  • 添字を使用した代入によるキャスト

  • 変換関数によるキャスト

  • Fixed-Point Designer™ の関数 reinterpretcast によるキャスト

  • 関数 cast によるキャスト

添字を使用した代入によるキャスト

次の添字を使用した代入ステートメントは A の型を維持し、B の値を int8 に飽和します。

A = int8(0);
B = int16(32767);
A(:) = B

A =

  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
      s8,0

    メモ:   添字を使用した代入の詳細は、関数 subsasgn の説明を参照してください。

変換関数によるキャスト

変換関数を使用すると、データ型を変換できます。この例では、A は上書きされるので事前に定義する必要がありません。

B = int16(32767);
A = int8(B)

A =

  127

class(A)

ans =

int8

fi オブジェクトについても同様です。

B = fi(32767, 1, 16, 0)
A = fi(B, 1, 8, 0)

B =
 
       32767
      s16,0
 
A =
 
   127
      s8,0

fi 変換関数での numerictype オブジェクトの使用-  通常は、特定の numerictype が多くの場所で使用されるので、変換関数で使用する numerictype オブジェクトを事前に定義しておくと便利です。これらのオブジェクトの事前定義は、データ型の指定を 1 か所に置くという点でもよい方法です。

T8 = numerictype(1,8,0)

T8 =
 

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

T16 = numerictype(1,16,0)

T16 =
 

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

B = fi(32767,T16)

B =
 
       32767
      s16,0

A = fi(B, T8)

A =
 
   127
      s8,0

関数 reinterpretcast によるキャスト

固定小数点データ型と組み込みデータ型は、基になるデータを変更せずに変換できます。Fixed-Point Designer の関数 reinterpretcast はこのような変換を実行します。

次の例で、B は、語長が 8 ビット、小数部の長さが 5 ビットの符号なし fi オブジェクトです。関数 reinterpretcastB を、語長が 8 ビット、小数部の長さが 1 ビットの符号付き fi オブジェクト A に変換します。AB の実際値は異なりますが、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

基になるデータが変更されていないことを確認するには、AB の 2 進数表現を比較します。

binary_B = bin(B)
binary_A = bin(A)

binary_A =

00011001   00100000   00110010   10000000

binary_B =

00011001   00100000   00110010   10000000

関数 cast によるキャスト

関数 cast を使用して、変数の値を別の変数と同じ numerictype、実数/複素数および fimath に変換できます。

次の例では、ab のデータ型にキャストされています。出力 cb と同じ numerictypefimath プロパティをもち、また 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

この構文を使用することで、「手動による固定小数点の変換のベスト プラクティス」で説明されているように、データ型をアルゴリズム コードとは別に指定できます。

この情報は役に立ちましたか?