このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
標準ライブラリの数学関数での Polyspace の過大近似の修正
問題
検証結果で、標準ライブラリの数学関数が想定どおりに動作しません。
たとえば、ステートメント assert(isinf(x))
で後続のステートメントの x
の値が正または負の無限大に制約されません。
原因
Polyspace® で数学関数の定義が見つからない場合、標準ライブラリの数学関数の Polyspace 実装が検証で使用されます。
場合によっては、関数の Polyspace 実装が関数の仕様と一致しないことがあります。そのような場合、Polyspace 実装では関数の動作の過大近似が行われます。たとえば、ステートメント assert(isinf(x))
に続く x
の値の範囲に正と負の無限大が含まれる場合などがあります。したがって、そのような動作はグリーン チェックにならず、ランタイム エラーの原因となる可能性がある演算と見なされます。
解決法
コンパイラの関数の実装を検証で使用するように、コンパイラのネイティブのヘッダー ファイルのパスを明示的に指定します。たとえば、一部のコンパイラでは、isinf
などの関数をマクロとしてヘッダー ファイルで実装します。
コマンド ラインから検証を実行している場合は、オプション
-I
を使用します。ユーザー インターフェイスから検証を実行している場合は、ユーザー インターフェイスでの Polyspace の実行を参照してください。
クロス コンパイラを使用してビルド システムから Polyspace プロジェクトを作成した場合、そのプロジェクトではコンパイラから提供されたヘッダー ファイルが使用されます。