単精度の変換におけるベスト プラクティス
インデックス変数に整数を使用
単精度に変換する MATLAB® コードでは、インデックス変数に整数を使用することをお勧めします。ただし、インデックス変数に整数を使用しないコードの場合、convertToSingle
は、可能であればインデックス変数の検出を試み、それらの変数に int32
型を選択します。
assert
ステートメントの使用制限
assert
ステートメントを使用して入力引数のプロパティを定義しないでください。assert
ステートメントを使用して変数の型をテストしないでください。たとえば、次を使用しないでください。assert(isa(a, 'double'))
コンストラクターでの MATLAB クラス プロパティの初期化
MATLAB クラス プロパティを properties
ブロックで初期化しないでください。代わりに、コンストラクターを使用してクラス プロパティを初期化します。
MATLAB 関数を呼び出すテスト ファイルの指定
コア アルゴリズムを、結果のテストと確認に使用する他のコードから分離します。倍精度の MATLAB アルゴリズムを呼び出すテスト ファイルを作成します。このテスト ファイルは以下の目的で使用できます。
最上位の関数入力のプロパティを自動的に定義します。
倍精度アルゴリズムが予想どおりに動作することを確認します。倍精度アルゴリズムの動作は、単精度バージョンのアルゴリズムの動作と比較する際のベースラインとなります。
単精度バージョンのアルゴリズムの動作を、倍精度のベースラインと比較します。
最良の結果を得るには、テスト ファイルによってアルゴリズムが動作範囲全体にわたって実行されなければなりません。
コード生成用のコードの準備
単精度に変換する MATLAB コードはコード生成の要件に準拠しなければなりません。C/C++ コード生成でサポートされている MATLAB 言語機能を参照してください。
MATLAB コード内のサポートされていない関数または構造体を特定するには、MATLAB ファイルの先頭に %#codegen
プラグマを追加します。MATLAB エディターでコードを編集すると、MATLAB コード アナライザーにより、コード生成でサポートされていない関数と構造体にフラグが付けられます。MATLAB コード アナライザーを使用したコードのチェックを参照してください。MATLAB Coder™ アプリを使用する場合、アプリはコード生成の準備状態に対してコードのスクリーニングを行います。関数行でコード生成の準備状態ツールを使用できます。コード生成の準備状態ツールを使用したコードのチェックを参照してください。
-args
オプションを使用して入力プロパティを指定
単精度の MATLAB コードを生成する場合、テスト ファイルを指定する際に -args
オプションを使用して引数のプロパティを指定する必要はありません。この場合、コード ジェネレーターはテスト ファイルを実行して入力の型のプロパティを決定します。ただし、テスト ファイルを実行するとコード生成の速度を低下させる可能性があります。convertToSingle
でテスト ファイルを実行して引数のプロパティを決定しないよう、プロパティを -args
オプションに渡すことをお勧めします。MATLAB Coder ライセンスがある場合は、coder.getArgTypes
を使用して引数のプロパティを決定できます。以下に例を示します。
types = coder.getArgTypes('myfun_test', 'myfun'); scfg = coder.config('single'); convertToSingle -config scfg -args types myfun
数値のテストと I/O データのログ
関数 convertToSingle を使用して単精度の MATLAB コードを生成する場合は、比較プロットに対して数値テストと I/O データのログを有効にします。数値テストを使用するには、MATLAB 関数を呼び出すテスト ファイルを指定しなければなりません。数値テストと I/O データ ログを有効にするには、coder.SingleConfig
オブジェクトを作成します。TestBenchName
、TestNumerics
および LogIOForComparisonPlotting
プロパティを設定します。以下に例を示します。
scfg = coder.config('single'); scfg.TestBenchName = 'mytest'; scfg.TestNumerics = true; scfg.LogIOForComparisonPlotting = true;