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

Идентификатор: Заголовокhisl_0016: Использование блоков, которые вычисляют реляционные операторы
Описание

Чтобы поддержать робастность операций, при использовании блоков, вычисляющих реляционные операторы, включая блоки Relational Operator (Simulink), Compare To Constant (Simulink), Compare To Zero (Simulink), Sign (Simulink), Detect Change (Simulink) и If (Simulink):

AИзбегайте сравнений с помощью == или ~= оператор для типов данных с плавающей точкой.
Примечания

Из-за проблем с точностью с плавающей точностью не проверяйте выражения с плавающей точкой на равенство (==) или неравенство (~=).

Когда модель содержит блок, вычисляющий реляционный оператор со == или ~= операторы, входы в блок не должны быть одинарным, двойным или любым пользовательским классом памяти, являющимся типом с плавающей точкой. Измените тип данных входных сигналов или переделайте модель, чтобы исключить использование == или ~= операторы в блоках, которые вычисляют реляционные операторы.

ОбъяснениеAУлучшите робастность модели.
Проверки Model AdvisorПроверяйте на наличие блоков реляционных операторов, которые приравнивают типы с плавающей точкой (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "
    IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, таблица A.4 (3) «Оборонительное программирование»

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (1b) «Использование языковых подмножеств»
    ISO 26262-6, таблица 1 (1с) «Обеспечение соблюдения строгих типоразмеров»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.4 (8) 'Сильно типизированный язык программирования'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • MISRA C:2012, Dir 1.1

См. также

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

himl_0009: код MATLAB с равными/не равными реляционными операторами (Simulink)

Последнее изменениеR2021a
Примеры

Положительный шаблон: Чтобы проверить, равны ли две переменные с плавающей точкой или выражения, сравните различие двух переменных с порогом, который учитывает относительную точность с плавающей точкой (eps) и величину чисел.

Следующий шаблон показывает, как протестировать два входных сигналов двойной точности, In1 и In2, для равенства.