himl_0009: код MATLAB с равным / не равняется операторам отношения

ID: Заголовокhiml_0009: код MATLAB® с равным / не равняется операторам отношения
Описание

Для кода MATLAB с равным или не равными операторами отношения, избегайте использования следующих типов данных:

  • Единственный

  • 'double'

  • Типы выведены из одного или двойных типов данных

Примечание

Рассмотрите следующие фрагменты кода:

  1. sqrt(2)^2 == 2

  2. sqrt(2^2) == 2

Математически, оба фрагмента верны. Однако из-за эффектов округления плавающей точки, результаты:

  1. false

  2. true

Объяснение
  • Предотвратите неожиданные результаты

Проверки Model AdvisorПроверяйте использование операторов равенства в блоках MATLAB function (Simulink Check)
Ссылки
  • DO-331, Раздел MB.6.3.1.g 'Алгоритмы точен’
    EN 50128, MB.6.3.2.g ''безопасное программирование'

  • IEC 61508-3, Таблица A.3 (3) 'Языковое подмножество'
    IEC 61508-3, Таблица A.4 (3) 'Безопасное программирование'

  • IEC 62304, 5.5.3 - критерии допустимости Программного блока

  • ISO 26262-6, Таблица 1 (1b) 'Использование языковых подмножеств'
    ISO 26262-6, Таблица 1 (1d) 'Использование защитных методов реализации'

  • EN 50128, таблица A.4 (11) 'языковое подмножество'
    EN 50128, таблица A.3 (1) 'безопасное программирование'

  • MISRA C:2012, Dir 1.1

Смотрите также

jc_0481: Использование твердых сравнений равенства для чисел с плавающей точкой в Stateflow (Simulink)

hisl_0016: Использование блоков, которые вычисляют операторы отношения (Simulink)

В последний раз измененныйR2018b
Примеры

Рекомендуемый

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

Не рекомендуемый

  • myDouble == 1.0
    mySingle ~= 15.0