-check-nan
)Задайте, как обработать операции с плавающей точкой тот результат в NaN
Эта опция влияет на анализ Программы автоматического доказательства Кода только.
Задайте, как анализ должен обработать операции с плавающей точкой тот результат в NaN.
Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Check Behavior. Смотрите Зависимости для других опций, которые необходимо также включить.
Командная строка: Используйте опцию -check-nan
. Смотрите информацию о командной строке.
Используйте эту опцию, чтобы включить обнаружение операций с плавающей точкой тот результат в NaN-s.
Если вы указываете, что анализ должен рассмотреть неличные плавания, по умолчанию, анализ не отмечает эти операции. Используйте эту опцию, чтобы обнаружить эти операции при тихом слиянии неличных плаваний.
Значение по умолчанию: allow
allow
Верификация не производит проверку на операции.
Например, в следующем коде, нет никакой проверки Invalid operation on floats.
double func(void) { double x=1.0/0.0; double y=x-x; return y; }
warn-first
Верификация производит проверку на операции. Проверка определяет, является ли результатом операции NaN, когда самими операндами не является NaN. Например, проверка отмечает операцию val1 + val2
только если результатом может быть NaN когда оба val1
и val2
не NaN. Верификация не отключает поток выполнения, который производит NaN.
Если верификация обнаруживает операцию, которая производит NaN как единственный возможный результат на всех путях к выполнению, и самими операндами никогда не является NaN, проверка является красной. Если операция может потенциально привести к NaN, проверка является оранжевой.
Например, в следующем коде, существует не блокирующаяся проверка Invalid operation on floats на NaN.
double func(void) { double x=1.0/0.0; double y=x-x; return y; }
Даже при том, что Invalid operation on floats проверяет -
операция является красной, верификация продолжается. Например, зеленая проверка Non-initialized local variable появляется на y
в return
оператор.
forbid
Верификация производит проверку на операции и отключает поток выполнения, который производит NaN.
Если проверка является красной, верификация не продолжается для остающегося кода в том же осциллографе как проверка. Если проверка является оранжевой, верификация продолжает, но удаляет из фактора значения переменных, которые произвели NaN.
Например, в следующем коде, существует блокирующаяся проверка Invalid operation on floats на NaN.
double func(void) { double x=1.0/0.0; double y=x-x; return y; }
Верификация останавливается, потому что Invalid operation on floats проверяет -
операция является красной. Например, проверка Non-initialized local variable не появляется на y
в return
оператор.
Проверка Invalid operation on floats на NaN также появляется на /
операция и является зеленой.
Чтобы использовать эту опцию, необходимо включить режим верификации, который включает бесконечности и NaNs. Смотрите Consider non finite floats (-allow-non-finite-floats)
.
Параметр: -check-nan |
Значение: allow | warn-first | forbid |
Значение по умолчанию: allow |
Пример (Программа автоматического доказательства Кода): Polyspace Code Prover - источники |
Пример (Сервер Программы автоматического доказательства Кода):
сервер программы автоматического доказательства полипробела кода - источники |