範囲と精度
数値の "範囲" によって表現の限界が指定され、"精度" によって表現の隣接する数値間の距離が指定されます。固定小数点数の範囲と精度は、語長およびスケーリングによって異なります。
メモ
丸め手法が呼び出されるかオーバーフローやアンダーフローが発生するかを把握するには、選択した固定小数点データ型およびスケーリングの精度と範囲に注意しなければなりません。
範囲
範囲とは、固定小数点データ型とスケーリングで表現できる数値の範囲です。固定小数点ワードのサイズが制限されているため、範囲には制限があります。
以下に、語長 、スケーリング 、およびバイアス の 2 の補数の固定小数点数で表現可能な数値の範囲を示します。ここで、、、および の値は、正の数値と負の数値のどちらにも許容されます。
データ型が符号付きと符号なしの固定小数点数のどちらでも、異なるビット パターン数は 2wl です。
たとえば、2 の補数では、ゼロと同様に負の数値も表現しなければならないので、最大値は 2wl -1 – 1 です。ゼロの表現は 1 つしかないため、正の数値と負の数値の数が異なります。つまり、 の表現はありますが、 の表現はありません。
範囲に対する制限
固定小数点のデータ型は有限範囲内の数値を表すため、演算の結果がその範囲の数値より大きいまたは小さい場合、オーバーフローとアンダーフローが発生する可能性があります。
2 進演算では、プロセッサは n ビットの固定小数点数を受け入れ、それを m ビットに格納しなければならないことがあります。ここで、 です。m < n の場合は数の範囲が縮小されるので、演算によってオーバーフロー状態が発生することがあります。一部のプロセッサではこの状態は Inf
または NaN
として捉えられます。他のプロセッサ、特にデジタル信号プロセッサ (DSP) では、この値は "飽和" するか、"ラップ" します。
Fixed-Point Designer™ ソフトウェアでは、オーバーフローを "飽和" または "ラップ" できます。飽和は、正のオーバーフローを使用する範囲内の最大の正の数値として表し、負のオーバーフローを使用する範囲内の最大の負の数値として表します。ラップはモジュロ演算を使用して、オーバーフローをそのデータ型の表現可能な範囲内にキャストします。
fi
オブジェクトを作成するとき、オーバーフローはすべて飽和されます。既定の fimath の OverflowAction
プロパティは saturate
です。fipref
オブジェクトの LoggingMode
プロパティを on
に設定すると、オーバーフローやアンダーフローのログを作成できます。
m > n の場合、値の範囲は拡張されています。ワードの範囲を拡張するには、"ガード ビット" を含めなければなりません。ガード ビットは、オーバーフローを防ぐためのものです。
Simulink® ソフトウェアではあらゆる固定小数点データ型の飽和とラップをサポートしていますが、ガード ビットは小数点のデータ型に対してのみサポートしています。
精度
固定小数点数の精度は、そのデータ型とスケーリングで表現できる連続値間の差異です。最下位ビットの値、つまり数値の精度は小数部のビット数によって決まります。固定小数点値は、そのデータ型とスケーリングの精度の半分以内で表現できます。
たとえば、2 進小数点の右側が 4 ビットの固定小数点の表現は、精度が 2-4、つまり 0.0625 であり、最下位ビットの値になります。このデータ型とスケーリングの範囲内の数値はすべて (2-4)/2、つまり 0.03125 以内で表現でき、これは精度が半分になります。これは有限精度の数値を表す例です。
精度に対する制限
固定小数点ワードの精度は、ワード サイズと 2 進小数点の位置に依存します。たとえば、実際値 35.375 を固定小数点数を使用して表現しなければならないとします。傾きバイアス エンコード スキームを使用すると、次のように表現されます。
ここで、V = 35.375. です。
実際値に最も近い 2 つの近似値は、Q = 13 と Q = 14 です。
どちらの場合も絶対誤差は同じになります。
制限された範囲内にある固定小数点値に対し、最も近い正の整数方向の丸めが行われる場合には、これによって最悪誤差が生じます。他の丸めモードが使用される場合、最悪誤差は 2 倍にも膨れあがることがあります。
ワードの精度はビット数を増加することで拡張できますが、この方法では実用的な制限が課されます。その代わりに、数が正確に表現されるように、データ型、ワード サイズ、およびスケーリングを慎重に選択しなければなりません。プロセッサではバイナリ ワードの精度に対処するために、丸めや後続ゼロの付加が一般的に行われます。
固定小数点データ型パラメーター
2 進小数点のみのスケーリングで説明したサポートされる固定小数点データ型の下限、上限、既定の 2 進小数点のみのスケーリングを以下の表に示します。
固定小数点データ型範囲と既定のスケーリング
名前 | データ型 | 下限 | 上限 | 既定のスケーリング (精度) |
---|---|---|---|---|
符号なしの整数 |
| 0 |
| |
符号付き整数 |
|
| ||
符号なし 2 進小数点 |
| 0 | ||
符号付き 2 進小数点 |
| |||
符号なし傾きバイアス |
|
| s | |
符号付き傾きバイアス |
| s |
s = 傾き、b = バイアス、ws = 語長、fl = 小数部の長さ
8 ビットの固定小数点データ型の範囲と精度 — 2 進小数点のみのスケーリング
2 進小数点のみのスケーリングでの 8 ビットの一般化固定小数点データ型の精度、符号付き値の範囲、符号なし値の範囲を以下の表に示します。最初のスケーリング値 (21) は、ワードに隣接していない 2 進小数点を表します。
スケーリング | 精度 | 符号付き値の範囲 (下限、上限) | 符号なし値の範囲 (下限、上限) |
---|---|---|---|
21 | 2.0 | -256, 254 | 0, 510 |
20 | 1.0 | -128, 127 | 0, 255 |
2-1 | 0.5 | -64, 63.5 | 0, 127.5 |
2-2 | 0.25 | -32, 31.75 | 0, 63.75 |
2-3 | 0.125 | -16, 15.875 | 0, 31.875 |
2-4 | 0.0625 | -8, 7.9375 | 0, 15.9375 |
2-5 | 0.03125 | -4, 3.96875 | 0, 7.96875 |
2-6 | 0.015625 | -2, 1.984375 | 0, 3.984375 |
2-7 | 0.0078125 | -1, 0.9921875 | 0, 1.9921875 |
2-8 | 0.00390625 | -0.5, 0.49609375 | 0, 0.99609375 |
8 ビットの固定小数点データ型の範囲と精度 — 傾きとバイアスのスケーリング
傾きとバイアスのスケーリングを使用している 8 ビットの固定小数点データ型に対する符号付きの値と符号なしの値の精度と範囲を次の表に示します。傾きは 1.25
の値で始まり、すべての傾きに対して 1.0
のバイアスが使用されます。傾きは精度と同じであることに注意してください。
バイアス | 傾き/精度 | 符号付き値の範囲 (下限、上限) | 符号なし値の範囲 (下限、上限) |
---|---|---|---|
1 | 1.25 | -159, 159.75 | 1, 319.75 |
1 | 0.625 | -79, 80.375 | 1, 160.375 |
1 | 0.3125 | -39, 40.6875 | 1, 80.6875 |
1 | 0.15625 | -19, 20.84375 | 1, 40.84375 |
1 | 0.078125 | -9, 10.921875 | 1, 20.921875 |
1 | 0.0390625 | -4, 5.9609375 | 1, 10.9609375 |
1 | 0.01953125 | -1.5, 3.48046875 | 1, 5.98046875 |
1 | 0.009765625 | -0.25, 2.240234375 | 1, 3.490234375 |
1 | 0.0048828125 | 0.375, 1.6201171875 | 1, 2.2451171875 |