-allow-non-finite-floats
)Включите аналитический режим, который включает бесконечности и NaNs
Включите аналитический режим, который включает бесконечности и NaNs для операций с плавающей точкой.
Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Check Behavior.
Командная строка: Используйте опцию -allow-non-finite-floats
. Смотрите информацию о Командной строке.
По умолчанию анализ не включает бесконечности и NaNs. Например, анализ отключает поток выполнения, где деление на нуль происходит и не полагает, что результат мог быть бесконечным.
Если вы используете функции, такие как isinf
или isnan
и объясняете бесконечности и NaNs в вашем коде, устанавливаете эту опцию. Когда вы устанавливаете эту опцию, и деление на нуль происходит, например, поток выполнения продолжает бесконечность как результат деления.
Установите одну только эту опцию, если вы уверены, что объяснили бесконечности и NaNs в вашем коде. Используя одну только опцию эффективно отключает много числовых проверок на операциях с плавающей точкой. Если вы обычно объясняли бесконечности и NaNs, но вы не уверены, что рассмотрели все ситуации, установил эти дополнительные опции:
Infinities (-check-infinite)
: используйте warn-first
.
NaNs (-check-nan)
: используйте warn-first
.
Если анализ отмечает сравнения с помощью isinf
или isnan
как мертвый код, используйте эту опцию. По умолчанию анализ Средства поиска Ошибки не включает бесконечности и NaNs.
Анализ позволяет бесконечности и NaNs. Например, в этом режиме:
Анализ принимает, что операции с плавающей точкой могут привести к результатам, таким как бесконечности и NaNs.
При помощи опций Infinities (-check-infinite)
и NaNs (-check-nan)
, можно принять решение подсветить операции, которые приводят к неличным результатам и останавливают потоки выполнения, где неличные результаты происходят. Эти опции не доступны для анализа Средства поиска Ошибки.
Анализ принимает, что переменные с плавающей точкой с неизвестными значениями могут иметь любое значение, позволенное их типом, включая бесконечный или NaN. Переменные с плавающей точкой с неизвестными значениями включают энергозависимые переменные и возвращаемые значения заблокированных функций.
Анализ не позволяет бесконечности и NaNs. Например, в этом режиме:
Анализ Программы автоматического доказательства Кода производит красную проверку на операции с плавающей точкой, которая производит бесконечность или NaN как единственный возможный результат на всех путях к выполнению. Верификация производит оранжевую проверку на операции с плавающей точкой, которая может потенциально произвести бесконечность или NaN.
Анализ Программы автоматического доказательства Кода принимает, что переменные с плавающей точкой с неизвестными значениями являются полным диапазоном, но конечный.
Анализ Средства поиска Ошибки показывает сравнения с бесконечностью с помощью isinf
в качестве мертвого кода.
Стандарт IEEE® 754 позволяет специальные количества, такие как бесконечности и NaN
так, чтобы можно было обработать определенные числовые исключения, не отменяя код. Некоторые реализации стандартных бесконечностей поддержки C и NaN
.
Если ваш компилятор поддерживает бесконечности и NaN
s, и вы объясняете их явным образом в вашем коде, используете эту опцию так, чтобы верификация также позволила им.
Например, если деление приводит к бесконечности к вашему коду, вы задаете альтернативное действие. Поэтому вы не хотите, чтобы верификация подсветила операции деления тот результат в бесконечности.
Если ваш компилятор поддерживает бесконечности и NaN
s, но вы не уверены, объясняете ли вы их явным образом в вашем коде, используйте эту опцию так, чтобы верификация включила бесконечности и NaN
s. Используйте опции -check-nan
и -check-infinite
с аргументом warn
так, чтобы верификация подсветила операции, которые приводят к бесконечностям и NaN
s, но не останавливает поток выполнения. Эти опции не доступны для анализа Средства поиска Ошибки.
Если при запуске анализ Программы автоматического доказательства Кода и используете эту опцию, средства проверки для переполнения, деления на нуль и других числовых ошибок времени выполнения отключены. Смотрите Числовые Проверки.
Если при запуске анализ Средства поиска Ошибки и используете эту опцию:
Средства проверки для переполнения и деления на нуль отключены. Смотрите Числовые Дефекты (Polyspace Bug Finder).
Средство проверки Floating point comparison with equality operators
может показать ложные положительные стороны.
Если вы выбираете эту опцию, номер и тип Программы автоматического доказательства Кода регистрируются в вашем коде, может измениться.
Например, в следующем примере, когда вы выбираете опцию, результаты имеют тот меньше красной проверки и три более зеленых проверки.
Бесконечности и NaNs, не разрешенный | Бесконечности и разрешенный NaNs |
---|---|
Программа автоматического доказательства кода производит ошибку Division by zero и останавливает верификацию. double func(void) {
double x=1.0/0.0;
double y=1.0/x;
double z=x-x;
return z;
} | Если вы выбираете эту опцию, Программа автоматического доказательства Кода не проверяет на ошибку Division by zero. double func(void) { double x=1.0/0.0; double y=1.0/x; double z=x-x; return z; } Анализ принимает что, делясь на нулевые результаты в:
В ваших результатах анализа в пользовательском интерфейсе Polyspace®, если вы устанавливаете свой курсор на |
Вы не можете запустить Автоматический Оранжевый Тестер в Программе автоматического доказательства Кода, если вы включаете non-finites в свой анализ.
Параметр: -allow-non-finite-floats |
Значение по умолчанию: 'off' |
Пример (средство поиска ошибки):
|
Пример (программа автоматического доказательства кода):
|
Пример (сервер средства поиска ошибки):
|
Пример (сервер программы автоматического доказательства кода):
|
Infinities (-check-infinite)
| NaNs (-check-nan)
| Числовые проверки | Числовые дефекты