Main Content

Logic and Bit Operations

hisl_0016: 関係演算子を計算するブロックの使用方法

ID: タイトルhisl_0016: 関係演算子を計算するブロックの使用方法
説明演算のロバスト性をサポートするために、浮動小数点データ型に対する等価演算子と不等演算子の使用を避けます。
メモ浮動小数点の精度に問題があるため、浮動小数点式の等価 (==) または不等価 (~=、!=) をテストしないでください。
根拠モデルのロバスト性を向上させて、予期しない結果を防止する。
モデル アドバイザー チェックCheck relational comparisons on floating-point signals (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (2) 'Strongly typed programming language’

    IEC 61508-3, Table A.3 (3) 'Language subset’

    IEC 61508-3, Table A.4 (3) 'Defensive programming'

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'

    ISO 26262-6, Table 1 (1c) 'Enforcement of strong typing'

  • EN 50128, Table A.4 (11) 'Language Subset'

    EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'

    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.1.g 'Algorithms are accurate'

    DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Dir 1.1

参考関係演算
最終更新R2021b

例: 1

例 — 正

  • myDouble > 0.99 && myDouble < 1.01; % test range

例 — 誤

  • myDouble == 1.0

  • mySingle ~= 15.0

例: 2

例 — 正

等価比較演算子は、浮動小数点オペランドで使用されていません。

例 — 誤

等価比較演算子 == が浮動小数点オペランドで使用されています。

例 — 正

2 つの浮動小数点変数または式が等しいかどうかをテストするには、浮動小数点の相対的精度 (eps) と数字の大きさを考慮に入れるしきい値と 2 つの変数の差を比較します。

次のパターンは、倍精度の 2 つの入力信号 In1 および In2 の等価性をテストする方法を示します。

例 — 誤

等価比較演算子 == が浮動小数点オペランドで使用されています。

hisl_0017: 関係演算子を計算するブロックの使用方法 (2)

ID: タイトルhisl_0017: 関係演算子を計算するブロックの使用方法 (2)
説明

Relational OperatorCompare To ConstantCompare to ZeroDetect Change など、関係演算子を計算するブロックを使用するときに、生成コード内の明確な動作をサポートするには、以下に従ってください。

Aブロック パラメーター [出力データ型][boolean] に設定する。
BRelational Operator ブロックについて、入力信号が同じデータ型であることを確認する。
根拠A、B明確な動作を生成するコードの生成をサポートする。
モデル アドバイザー チェックCheck usage of Relational Operator blocks (Simulink Check)
参考文献
  • IEC 61508-3, Table A.3 (2) 'Strongly typed programming language’
    IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming'

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'
    ISO 26262-6, Table 1 (1c) 'Enforcement of strong typing'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • MISRA C:2012, Rule 10.1

参考hisl_0016: 関係演算子を計算するブロックの使用方法
最終更新R2018a

hisl_0018: Logical Operator ブロックの使用方法

ID: タイトルhisl_0018: Logical Operator ブロックの使用方法
説明

Logical Operator ブロックの使用時に、生成コードの明確な動作をサポートするには、以下に従ってください。

A

ブロック パラメーター [出力データ型][boolean] に設定する。

B

入力信号が Boolean 型であるか確認する。

前提条件

hisl_0045: [コンフィギュレーション パラメーター]、[数学とデータ型]、[boolean データ (対 double) として論理信号を処理]

根拠A、B生成されたコードのあいまいな動作を避ける。
モデル アドバイザー チェックCheck usage of Logical Operator blocks (Simulink Check)
参考文献
  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • IEC 61508-3, Table A.3 (2) 'Strongly typed programming language’
    IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.4 (3) 'Defensive programming'

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'
    ISO 26262-6, Table 1 (1c) 'Enforcement of strong typing'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'
    EN 50128, Table A.3 (1) 'Defensive Programming'

  • MISRA C:2012, Directive 10.1

最終更新R2017b

hisl_0019: ビット演算の使用方法

ID: タイトルhisl_0019: ビット演算の使用方法
説明

ビット演算の使用時に、明確な動作をサポートするには、以下に従ってください。

A

符号付き整数データ型のビット演算を避ける。

メモ

動作が予測できないため、ビット演算は符号付き整数では意味がありません。たとえば、シフト演算によって符号ビットが数字に移動したり、数値ビットが符号ビットに移動したりする可能性があります。

根拠A生成されたコードの明確な動作をサポートする。
モデル アドバイザー チェックCheck usage of bit operation blocks (Simulink Check)
参考文献
  • DO-331, Section MB.6.3.2.g 'Algorithms are accurate'

  • IEC 61508-3, Table A.3 (3) 'Language subset’
    IEC 61508-3, Table A.3 (2) 'Strongly typed programming language’

  • IEC 62304, 5.5.3 - Software Unit acceptance criteria

  • ISO 26262-6, Table 1 (1b) 'Use of language subsets'
    ISO 26262-6, Table 1 (1c) 'Enforcement of strong typing'
    ISO 26262-6, Table 1 (1d) 'Use of defensive implementation techniques'

  • ISO 26262-6, Table 1 (1d) 'Use of defensive implementation techniques'

  • EN 50128, Table A.4 (11) 'Language Subset'
    EN 50128, Table A.3 (1) 'Defensive Programming'
    EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'

  • EN 50128, Table A.3 (1) 'Defensive Programming'

  • EN 50128, Table A.4 (8) 'Strongly Typed Programming Language'

  • MISRA C:2012, Rule 10.1

参考hisl_0073: ビットシフト演算の使用方法
最終更新R2021b