オーバーフローの検出
この例では、固定小数点コンバーター アプリを使用したオーバーフローの検出方法について説明します。変換プロセスの数値テストの段階では、スケーリングされた double を使用して固定小数点コードのシミュレーションを実行します。その後、固定小数点データ型をオーバーフローさせる値を生成する生成コード内の式が報告されます。
必要条件
この例には次の製品が必要です。
MATLAB®
Fixed-Point Designer™
C コンパイラ
サポートされるコンパイラ を参照してください。
mex -setup
を使用して既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。
新規フォルダーの作成と関連ファイルのコピー
ローカル作業フォルダーを作成します。たとえば、
c:\overflow
のようにします。docroot\toolbox\fixpoint\examples
フォルダーに変更します。MATLAB コマンド ラインで次のように入力します。cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
overflow.m
およびoverflow_test.m
ファイルをローカル作業フォルダーにコピーします。次のような事前処理と事後処理を行う別のテスト スクリプトを作成することをお勧めします。
入力の読み込み
入力値の設定
テスト結果の出力
詳細は、テスト ファイルの作成を参照してください。
タイプ 名前 説明 関数のコード overflow.m
MATLAB のエントリポイント関数 テスト ファイル overflow_test.m
MATLAB スクリプト。次をテストします。 overflow.m
固定小数点コンバーター アプリを開く
この例で使用するファイルを含む作業フォルダーに移動します。
MATLAB ツールストリップの [アプリ] タブの [コード生成] の下で、アプリ アイコンをクリックします。
ソース ファイルの選択
プロジェクトにエントリポイント関数
overflow
を追加するために、ファイルoverflow.m
を探して [開く] をクリックします。既定では、アプリはこのプロジェクトの情報および設定を現在のフォルダーのoverflow.prj
というファイルに保存します。[次へ] をクリックして [入力の型を定義] ステップに進みます。
overflow.m
のコード違反および固定小数点変換の準備状態の問題が検査されます。overflow.m
には問題は検出されません。
入力の型の定義
[入力の型を定義] ページで、
overflow_test
をテスト ファイルとして追加するためにoverflow_test.m
を選択して [開く] をクリックします。[入力の型の自動定義] をクリックします。
テスト ファイルが実行されます。アプリはテスト ファイルから、
b
の入力型をdouble(1x12)
、x
をdouble(256x1)
、reset
をlogical(1x1)
とすることを決定します。[次へ] をクリックして [固定小数点に変換] ステップに進みます。
固定小数点への変換
エントリポイント MATLAB 関数用にインストルメント化された MEX 関数がアプリによって生成されます。コードに含まれる変数についてコンパイルされた情報 (データ型、サイズ、実数/複素数) が表示されます。詳細は、変数情報の表示と変更を参照してください。
[関数の置き換え] タブに、固定小数点の変換に対応していない関数が表示されます。シミュレーションの実行を参照してください。
fimath 設定を表示するために、[設定] 矢印
をクリックします。fimath の [乗算器モード] と [加算器モード] を
[最下位ビットを保持]
に設定します。これらの設定は C 言語の整数演算の動作をモデル化します。[解析] をクリックします。
テスト ファイル
overflow_test
が実行されます。[変数] タブにシミュレーションの最小範囲と最大範囲が表示されます。ソフトウェアは、シミュレーション範囲のデータを使用し、既定の型推奨の設定に基づき固定小数点の型を変数ごとに推奨し、[推奨された型] 列に表示します。浮動小数点アルゴリズムを固定小数点に変換するには、[変換] をクリックします。
推奨された型がソフトウェアによって検証され、エントリポイント関数の固定小数点バージョンが生成されます。
検証中にエラーおよび警告が発生した場合は、それらが [出力] タブに表示されます。型の検証を参照してください。
数値のテストとオーバーフローの確認
[テスト] 矢印
をクリックします。テスト ファイルが
overflow_test.m
であることを確認します。[スケーリングされた double を使用してオーバーフローを検出] を選択し、[テスト] をクリックします。入力型を定義するために使用したテスト ファイルが実行され、固定小数点 MATLAB コードがテストされます。オーバーフローを検出するように選択したので、推奨された固定小数点型のスケーリングされた double のバージョンを使用してシミュレーションが実行されます。スケーリングされた double は、倍精度浮動小数点のデータを格納するため、演算を全範囲で実行します。固定小数点設定が維持されるため、計算が固定小数点型の範囲から外れた場合に報告できます。
シミュレーションが実行されます。アプリによってオーバーフローが検出されます。[オーバーフロー] タブにオーバーフローが報告されます。オーバーフローした式を強調表示するには、そのオーバーフローをクリックします。
オーバーフローしたのが加算か乗算かを判断します。
[fimath] の設定で、[乗算器モード] を
[FullPrecision]
に設定し、変換を繰り返して固定小数点モードを再度テストします。オーバーフローが継続して発生し、式の加算でオーバーフローしていることが示されます。