ネイティブ浮動小数点の数値に関する考慮事項
ネイティブ浮動小数点テクノロジーによって、浮動小数点設計から HDL コードを生成できます。浮動小数点設計では、固定小数点設計に比べて、精度が向上し、ダイナミック レンジが高くなり、開発サイクルが短縮されます。設計に複雑な算術演算がある場合は、ネイティブ浮動小数点テクノロジーを使用します。
HDL Coder™ は、浮動小数点演算の IEEE® 754 標準に準拠したコードを生成します。HDL Coder のネイティブ浮動小数点は、以下をサポートしています。
最も近い偶数への丸め
HDL Coder のネイティブ浮動小数点は、最も近い偶数への丸めをサポートしています。このモードは、最も近い偶数に丸めてすべての同順位を解決します。
この丸め手法では、仮数の 23 ビットの後に最後のビットとして少なくとも 3 ビットが必要です。MSB はガード ビット、ミドル ビットはラウンド ビット、LSB はスティッキー ビットと呼ばれます。次の表は、HDL Coder で最後の 3 ビットの各値に基づいて実行される丸めアクションを示します。x
は、don’t care 値であり、0 または 1 のいずれかを取ります。
丸めビット | 丸めアクション |
---|---|
0xx | アクションは実行されない。 |
100 | 同順位。ガード ビットの前にある仮数ビットが 1 である場合は丸められ、それ以外の場合は何も実行されない。 |
101 | 丸められる。 |
11x | 丸められる。 |
非正規数
非正規数は、ゼロに等しい指数フィールドおよび非ゼロ仮数フィールドをもつ数値です。仮数の最初のビットはゼロです。
非正規数の大きさは、仮数の先頭にゼロを付けずに表現できる最小の浮動小数点数より小さくなります。非正規数が存在する場合は有効桁数の損失を示し、複数の演算で累積されて予期しない値になる可能性があります。
HDL Coder が使用する非正規数を処理するロジックでは、先頭のゼロの数をカウントし、左シフト演算を実行して正規化された表現を得ることが必要です。このロジックを追加することで、ターゲット デバイスの面積のフットプリントが増え、設計のタイミングに影響を与える可能性があります。
ネイティブ浮動小数点のサポートを使用する場合は、設計で非正規数を処理するように指定できます。
例外処理
ゼロ除算などの演算を実行したり、負の数値の対数を計算したりする場合、HDL Coder によって例外が検出および報告されます。次の表は、浮動小数点数のエンコードからさまざまな例外の数値へのマッピングをまとめています。x
は don’t care 値を示し、マッピングに影響を与えずに、0 または 1 の値を取ることができます。
符号 | 指数 | 仮数 | 値 | 説明 |
---|---|---|---|---|
x | 0xFF | 0x00000000 |
| 無限大 |
x | 0xFF | 非ゼロ値 | value = NaN | 非数値 |
x | 0x00 | 0x00000000 | value = 0 | ゼロ |
x | 0x00 | 非ゼロ値 |
| 非正規 |
x | 0x00 < E < 0xFF | x |
| ノーマル |
相対精度と ULP の考慮事項
無限の実数を有限のビット数で表現するには近似が必要です。この近似によって、浮動小数点計算で丸め誤差が発生することがあります。丸め誤差を測定するために、浮動小数点標準では相対誤差と ULP 誤差を使用します。
ULP
指数範囲に上限がない場合、浮動小数点数 x の ULP 値は、x をまたぐ直近の 2 つの浮動小数点数 a と b との間の距離を表します。IEEE 754 標準では、加算、乗算、除算などの基本的な算術演算の結果を正しく丸める必要があります。正しく丸められた結果とは、丸められた結果が正確な結果の 0.5 ULP 内であることを意味します。
ULP 値が 1 の場合は、格納された整数の 10 進数値に 1 を加算することを意味します。次の表は、9 桁の 10 進数に対する π の近似と、ULP 値 1 でこの近似値がどのように変化するかを示しています。
浮動小数点数 | 格納された整数の 10 進数値 | single 型の IEEE-754 表現 |
---|---|---|
3.141592741 | 1078530011 | 0|10000000|10010010000111111011011 |
3.141592979 | 1078530012 | 0|10000000|10010010000111111011100 |
2 つの連続的に表現可能な浮動小数点数間のギャップは、絶対値に応じて変わります。
浮動小数点数 | 格納された整数の 10 進数値 | single 型の IEEE-754 表現 |
---|---|---|
1234567 | 1234613304 | 0|10010011|00101101011010000111000 |
1234567.125 | 1234613305 | 0|10010011|00101101011010000111001 |
相対誤差
相対誤差は、浮動小数点数と実数の近似との間の相対差を測定します。実数 a と b 間の相対誤差は、a と b の最大値に対する数値 a と b 間の差の絶対値の比率です。
次の表は、ULP 値 1 をもつ連続する 2 つの浮動小数点値の間の相対誤差を示しています。
浮動小数点数 | 格納された整数の 10 進数値 | single 型の IEEE-754 表現 | 相対誤差 |
---|---|---|---|
1234567 | 1234613304 | 0|10010011|00101101011010000111000 | 1.0125e-07 |
1234567.125 | 1234613305 | 0|10010011|00101101011010000111001 |