Main Content

オーバーフローの処理と丸め手法

オーバーフロー処理と丸め手法のトークン

ユーザー記述の固定小数点 S-Function 用の API では、変換などのいくつかの数学演算用の関数を提供しています。これらの演算を実行すると、精度の低下やオーバーフローが発生する可能性があります。次の表のトークンを使用すると、API 関数によって桁落ちおよびオーバーフローを処理する方法を制御できます。オーバーフローの処理方法のデータ型は fxpModeOverflow です。丸めモードのデータ型は fxpModeRounding です。

オーバーフロー処理のトークン

トークン

説明

FXP_OVERFLOW_SATURATE

オーバーフローを飽和

FXP_OVERFLOW_WRAP

オーバーフローをラップ

丸め手法のトークン

トークン

説明

FXP_ROUND_CEIL

正の無限大方向の最も近い表現可能な数値に丸める

FXP_ROUND_CONVERGENT

最も近い偶数の整数への丸め (等距離の場合は最も近い偶数の整数に丸める)

FXP_ROUND_FLOOR

負の無限大方向の最も近い表現可能な数値に丸める

FXP_ROUND_NEAR

正の無限大方向の丸められた厳密な中点で、最も表記可能な数値に丸める

FXP_ROUND_NEAR_ML

最も近い正の整数方向に丸める。等距離の場合、負の数値に対しては負の無限大方向に丸め、正の数値に対しては正の無限大方向に丸める

FXP_ROUND_SIMPLEST

負方向への丸めとゼロ方向への丸めのいずれかを自動的に選択し、できるだけ効率の高い生成コードを生成

FXP_ROUND_ZERO

ゼロ方向の最も近い表現可能な数値に丸める

オーバーフローのログ構造体

関数 ssFxpConvert のような API の数学関数では、演算の実行時にオーバーフローが発生することがあります。これらの関数には、オーバーフローの発生のログを作成して、そのログを呼び出し元にレポートするメカニズムがあります。

データ型 fxpOverflowLogs の変数を定義すると、S-Function で固定小数点オーバーフローのログ構造体を使用できます。関数 ssFxpConvert などのいくつかの API 関数では、この構造体を指すポインターを引数として受け入れます。関数は、ログ構造体を初期化して、関数の実行中に発生する次の各イベントのカウントを維持します。

  • オーバーフロー

  • 飽和

  • ゼロ除算

ログ構造体を指すポインターを受け入れる関数が呼び出されると、関数は構造体のイベント カウントをゼロに初期化します。次に、要求された数学演算が実行されます。イベントが検出されるたびに、該当するイベント カウントが 1 だけインクリメントされます。

次のフィールドには、構造体のイベントカウント情報が含まれます。

  • OverflowOccurred

  • SaturationOccurred

  • DivisionByZeroOccurred