整数オーバーフローまたは非有限のサポートの無効化
コード ジェネレーターは、次の状況をサポートするコードを生成します。
整数演算の結果が、整数オーバーフローとして知られている、データ型で表現可能な範囲外になる。
演算によって非有限値 (
inf
とNaN
) が生成される。
こうした状況が発生しないと分かっている場合、生成されるコードのサイズを減少させ、速度を向上させるために、サポート コードの生成を抑制することができます。ただし、サポート コードの生成を抑制し、こうしたいずれかの状況が発生した場合、生成されるコードの動作は元の MATLAB® コードの動作と一致しない可能性があります。
整数オーバーフローのサポートの無効化
既定では、コード ジェネレーターは整数オーバーフローを処理するコードを生成します。オーバーフローは、データ型が表現できる最小値または最大値のいずれかに飽和します。コードが整数オーバーフローのサポートに依存していないことが分かっている場合、パフォーマンスを改善するために、整数オーバーフローを処理するコードの生成を無効にできます。整数オーバーフローのサポートを無効にするには、次を実行します。
MEX またはスタンドアロン コード (スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能プログラム) のコード生成構成オブジェクトで、
SaturateOnIntegerOverflow
プロパティをfalse
に設定します。MATLAB Coder™ アプリで、[整数オーバーフローで飽和] を
No
に設定します。
メモ
コードがサポートに依存していないと確認できない限り、整数オーバーフローのサポートを無効にしないでください。サポートを無効にし、実行時チェックを有効にすると、生成されたコードによって整数オーバーフローのエラーが発生します。整数オーバーフローのサポートを無効にし、実行時チェックも無効にした場合、整数オーバーフローの動作は未定義です。ほとんどの C コンパイラはオーバーフロー時にラップします。
コードが整数オーバーフローのサポートに依存しているかどうかをチェックするには、次を実行します。
整数オーバーフローのサポートを無効にします。
チェックを有効にして、実行時に整数オーバーフローを検出します。
MEX の場合、整合性チェックを有効にします。実行時チェックの制御を参照してください。
スタンドアロン コード (スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能プログラム) の場合、実行時チェックを有効にします。実行時エラーを検出および報告するスタンドアロン C/C++ コードの生成を参照してください。
入力値のすべての範囲に対して生成されたコードを実行します。生成されたコードが整数オーバーフローを検出すると、エラーが発生します。
非有限数のサポートの無効化
既定では、スタンドアロン コード (スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能プログラム) に対しては、コード ジェネレーターは非有限数 (inf
と NaN
) を処理するコードを生成します。コードが非有限数のサポートに依存していないことが分かっている場合、生成されたコードのパフォーマンスを改善するために、このサポートを無効にできます。非有限サポートを無効にするには、次を実行します。
コード生成構成オブジェクト内で
SupportNonFinite
プロパティをfalse
に設定する。MATLAB Coder アプリで、[非有限数のサポート] を
No
に設定する。
非有限サポートを無効にした場合、生成されたコードが予測どおりに動作することをテストします。