Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

2 進小数点スケーリングの実行

この例では、fiオブジェクトを使用して 2 進小数点スケーリングを実行する方法を説明します。

fi オブジェクトの作成

fi コンストラクター a = fi(v,s,w,f) を使用して、値 v、符号属性 s、語長 w、小数部の長さ ffi オブジェクトを返します。s が true (符号付き) の場合、結果の fi オブジェクトの先行または上位ビット (MSB) は常に符号ビットです。小数部の長さ f はスケーリング 2^(-f) を示します。小数部の長さまたはスケーリングによって fi オブジェクト内の 2 進小数点の位置が決まります。

たとえば、値 0.5 とスケーリング 2^(-7) の符号付き 8 ビット fi オブジェクトを作成します。

a = fi(0.5,true,8,7)
a = 
    0.5000

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

小数部の長さが正で語長より短い場合

小数部の長さ f が正で語長より短い場合、2 進小数点は最下位ビット (LSB) の f だけ左側かつワード内にあります。

たとえば、小数部の長さが 1 で値が -0.5 の符号付き 3 ビット fi では、2 進小数点は LSB の 1 つ左側にあります。この場合、各ビットは 1 に設定されて、2 進小数点の fi の 2 進等価は、11.1 となります。

-0.5 の実際の値は、LSB から符号付き MSB までのスケーリング ファクターで各ビットを乗算することによって得られます。

(1*2^-1) + (1*2^0) + (-1*2^1) = -0.5

storedInteger(a) は、格納された符号付きのスケールなし整数値 -1 を返します。

(1*2^0) + (1*2^1) + (-1*2^2) = -1

a = fi(-0.5,true,3,1)
a = 
   -0.5000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: 1
bin(a)
ans = 
'111'
storedInteger(a)
ans = int8
    -1

小数部の長さが正で語長より長い場合

小数部の長さ f が正で語長より長い場合、2 進小数点は LSB の f だけ左側かつワードの外にあります。

たとえば、小数部の長さが 4 で値が -0.0625 の符号付き 3 ビット ワードの 2 進数表現は ._111 です。ここで、._111_ は 3 ビット ワードの一部ではない未使用ビットを示します。_ の直後の 1 は MSB または符号ビットです。

実際の値 -0.0625 は、以下のように計算されます (LSB ~ MSB)。

(1*2^-4) + (1*2^-3) + (-1*2^-2) = -0.0625

b = fi(-0.0625,true,3,4)
b = 
   -0.0625

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: 4
bin(b)
ans = 
'111'
storedInteger(b)
ans = int8
    -1

小数部の長さが負の整数で語長より短い場合

小数部の長さ f が負の場合、2 進小数点は LSB の f だけ右側かつ物理的ワードの外にあります。

たとえば、c = fi(-4,true,3,-2) では、2 進小数点は LSB 111__. の 2 つ右側にあります。ここでは、右端にある 2 つのスペースは、3 ビット ワードの一部ではない未使用ビットです。右端にある 1 は LSB で、先行する 1 は符号ビットです。

-4 の実際の値は、スケーリング ファクター 2^(-f) で、たとえば LSB では 2(-(-2)) = 2^(2) で各ビットを乗算して、積を加算することによって得られます。

(1*2^2) + (1*2^3) +(-1*2^4) = -4

c = fi(-4,true,3,-2)
c = 
    -4

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: -2
bin(c)
ans = 
'111'
storedInteger(c)
ans = int8
    -1

小数部の長さが最適な精度で自動的に設定され負である場合

fi が含むべき値によって小数部の長さが自動的に設定される符号付き 3 ビット fi を作成します。最終的な fi は、語長が 3 ビットで小数部の長さが -1 の値 6 をもちます。ここで、2 進小数点は、LSB の 1 つ右側で、011_. です。_ はまた未使用ビットで、_ の直前の 1 が LSB です。先行する 1 は符号ビットです。

実際の値 6 は、以下のようにして求められます。

(1*2^1) + (1*2^2) + (-0*2^3) = 6

d = fi(5,true,3)
d = 
     6

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: -1
bin(d)
ans = 
'011'
storedInteger(d)
ans = int8
    3

fi 2 進小数点スケーリングの対話型の例

2 進小数点スケーリングの対話型の例を実行するには、MATLAB® コマンド ウィンドウで「fibinscaling」と入力します。

この対話型の例では、スライダーを使用して 2 進小数点を移動することによって 3 ビット固定小数点数の小数部の長さを変更できます。小数部の長さは -35 で変更できます。符号付き数か符号なし数のいずれかに対して 3 ビットの値を '0' または '1' に変更できます。

%#ok<*NOPTS,*NASGU>

参考

| |