Main Content

NumericTypeScope

固定小数点データ型を判別

説明

NumericTypeScope オブジェクトは、データのダイナミック レンジに関する情報を提供します。このスコープはデータのダイナミック レンジを log2 ヒストグラムの形式で視覚的に表現したものです。

作成

説明

H = NumericTypeScopeNumericTypeScope オブジェクトを返します。NumericTypeScope オブジェクトを作成した後、関数 step を使用してデータを処理し、NumericTypeScope を表示します。

NumericTypeScope のウィンドウでは、fi オブジェクトのダイナミック レンジが log2 ヒストグラムで可視化されます。ヒストグラムの "x" 軸方向にビットの重みが表示され、"y" 軸方向に出現割合が表示されます。ヒストグラムの各ビンはバイナリ ワードのビットに対応しています。たとえば、20 はバイナリ ワードの最初の整数ビットに対応し、2-1 はバイナリ ワードの最初の小数ビットに対応します。

NumericTypeScope では、現在のデータ型に基づいて潜在的なオーバーフローとアンダーフローを特定します。スコープにおいて、オーバーフローまたはアンダーフローを引き起こす可能性がある値とデータ型の範囲内にある値がヒストグラムのバーを次のように色分けして示されます。

  • 青 - ヒストグラム ビンに現在のデータ型の範囲内にある値が格納されます。

  • 赤 - ヒストグラム ビンにオーバーフローを引き起こす可能性がある値が含まれています。

  • 黄 - ヒストグラム ビンにアンダーフローを引き起こす可能性がある値が含まれています。

ヒストグラムの下の表に、各カテゴリの値の内訳が符号付きの値別に表示されます。

[データ ブラウザー] ペインには、現在の固定小数点データ型が [推定されたデータ型] として表示されます。このボックスに値を直接入力してデータ型を変更できます。

Screenshot of Numeric Type Scope Object with Overflows and Negative Values

オブジェクト関数

stepProcess data and visualize dynamic range
showOpen NumericTypeScope object
resetClear stored information from NumericTypeScope object

すべて折りたたむ

NumericTypeScope を使用して、fi オブジェクトのダイナミック レンジを表示します。

fi オブジェクトを作成し、DataTypeOverrideScaledDoubles に設定します。

a = fi(magic(10),1,8,2);
b = fi([a; 2.^(-5:4)],1,8,3);

fp = fipref;
initialDTOSetting = fp.DataTypeOverride;
fp.DataTypeOverride = 'ScaledDoubles';

NumericTypeScope オブジェクトを作成します。reset メソッドを使用して、NumericTypeScope オブジェクト h に格納されているすべての情報を確実に消去できます。

h = NumericTypeScope;
reset(h)

step メソッドを使用して、データを処理し、fi オブジェクト b のダイナミック レンジを可視化します。

step(h,b);

NumericTypeScope のウィンドウを閉じても、オブジェクトはワークスペースから削除されません。NumericTypeScope のウィンドウを閉じ、関数 show を使用して再度開きます。

show(h);

NumericTypeScope で表示される log2 ヒストグラムから、変数のデータ型の範囲外の値と精度を下回る値の両方があることがわかります。ヒストグラムの特定のバーをポイントすると、そのバーで表される合計値に対する割合が表示されます。

この場合、b のデータ型は numerictype(1,8,3) です。numerictype(1,8,3) のデータ型では 5 つの整数ビット (符号付きビットも含む) と 3 個の小数部ビットを使用できます。したがって、このデータ型は -2^4 から 2^4 - 2^-3 まで (-16 ~ 15.8750) の範囲値のみを表現できます。このデータ型に範囲と精度を指定すると、2^4 を超える値は範囲外となり、2^–3 未満の値はデータ型の精度を下回ることになります。

NumericTypeScope から、ビット 5、6、7 を必要とする値は範囲外であり、小数部のビット 4 と 5 を必要とする値は精度が低いことがわかります。この情報が手元にあるので、変数 b のデータ型を numerictype(0,13,5) に変えることにより、範囲外の値と精度の低い値を回避することができます。

この情報が手元にあるので、変数 b のデータ型を numerictype(0,13,5) に変えることにより、範囲外の値と精度の低い値を回避することができます。NumericTypeScope で、[推奨されたデータ型] ボックスに「numerictype(0,13,5)」と入力します。

元のデータ型オーバーライドの設定に戻します。

fp.DataTypeOverride = initialDTOSetting;

ダイナミック レンジを確認し、DataTypeMode が「Scaled double: binary point scaling」の fi オブジェクトに適した数値型を決定します。

DataTypeMode が「Scaled double: binary point scaling」の numerictype オブジェクトを作成します。その後、その numerictype オブジェクトを使用して fi オブジェクトを作成します。

T = numerictype;
T.DataTypeMode = 'Scaled double: binary point scaling';
T.WordLength = 8;
T.FractionLength = 6;

a = fi(sin(0:100)*3.5, T);
b = fi(cos(0:100)*1.75,T);
acc = fi(0,T);

NumericTypeScope オブジェクト h を作成します。その後、関数 stepfor ループで使用して、アキュムレータ オブジェクト acc のダイナミック レンジを表示します。

h = NumericTypeScope;
for i = 1:length(a)
    acc(:) = a(i)*0.7+b(i);
    step(h,acc)
end

このダイナミック レンジ解析では、5 ビットのアキュムレータ内のデータの全範囲を表現できることが示されました。5 ビットの内訳は 2 進小数点の左側 2 ビットが整数ビットで右側 3 ビットが小数ビットです。このデータ型により、numerictype オブジェクト TWordLength プロパティと FractionLength プロパティを変更することで、すべての値を表現できることを確認できます。その後、T を使用してアキュムレータを再定義します。

T.WordLength = 5;
T.FractionLength = 2;
acc = fi(0,T);

この新しいデータ型に基づくダイナミック レンジ解析を確認するには、NumericTypeScope オブジェクト h をリセットし、ループを再実行します。

reset(h)
for i = 1:length(a)
    acc(:) = a(i)*0.7 + b(i);
    step(h,acc)
end

NumericTypeScope オブジェクト h に格納された情報を消去します。

reset(h);

バージョン履歴

R2010a で導入

すべて展開する