最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

オーバーフローの検出

この例では、関数 fiaccel を使用したオーバーフローの検出方法について説明します。変換プロセスの数値テストの段階では、ツールはスケーリングされた double を使用して固定小数点コードのシミュレーションを実行します。その後、生成されたコード内で固定小数点データ型のオーバーフローを発生させる可能性のある値を生成する式をレポートします。

必要条件

この例を実行するには、次の製品をインストールしなければなりません。

新規フォルダーの作成と関連ファイルのコピー

  1. ローカル作業フォルダーを作成します。たとえば、c:\overflow のようにします。

  2. docroot\toolbox\fixpoint\examples フォルダーに変更します。MATLAB コマンド ラインで次のように入力します。

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. overflow.m および overflow_test.m ファイルをローカル作業フォルダーにコピーします。

    入力の読み込みや、入力値の設定、テストする関数の呼び出し、テスト結果の出力など、すべての前処理と後処理を実行するための独立したテスト スクリプトを作成することをお勧めします。

    タイプ名前説明
    関数のコードoverflow.mMATLAB のエントリポイント関数
    テスト ファイルoverflow_test.mMATLAB スクリプト。次をテストします。 overflow.m

 関数 overflow

 関数 overflow_test

構成オブジェクトの設定

  1. coder.FixptConfig オブジェクト fixptcfg を既定の設定で作成します。

    fixptcfg = coder.config('fixpt');
  2. テスト ベンチの名前を設定します。この例では、テスト ベンチ関数名は overflow_test です。

    fixptcfg.TestBenchName = 'overflow_test';
  3. 既定の語長を 16 に設定します。

    fixptcfg.DefaultWordLength = 16;

オーバーフロー検出の有効化

fixptcfg.TestNumerics = true;
fixptcfg.DetectFixptOverflows = true;

fimath オプションの設定

fimath Product mode およびSum modeKeepLSB に設定します。これらの設定は C 言語の整数演算の動作をモデル化します。

fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''KeepLSB'', ''SumMode'', ''KeepLSB'')';

固定小数点への変換

浮動小数点の MATLAB 関数 overflow を固定小数点の MATLAB コードに変換します。テスト ファイルから型が推測されるので、fiaccel コマンドの入力型を指定する必要はありません。

fiaccel -float2fixed fixptcfg overflow

数値テスト段階でオーバーフローがレポートされます。

Overflow error in expression 'acc + b( j )*z( k )'. Percentage of Current Range = 104%.

結果のレビュー

この式内の加算または乗算がオーバーフローしているか判断します。乗算がオーバーフローしないように fimath ProductMode を FullPrecision に設定し、fiaccel コマンドを再度実行します。

fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''FullPrecision'', ''SumMode'', ''KeepLSB'')';
fiaccel -float2fixed fixptcfg overflow

数値テスト段階で、継続してオーバーフローがレポートされ、式の加算でオーバーフローしていることが示されます。