-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
как мертвый код, используйте эту опцию. По умолчанию анализ Bug Finder не включает бесконечности и NaNs.
Анализ позволяет бесконечности и NaNs. Например, в этом режиме:
Анализ принимает, что операции с плавающей точкой могут привести к результатам, таким как бесконечности и NaNs.
При помощи опций Infinities (-check-infinite)
и NaNs (-check-nan)
, можно принять решение подсветить операции, которые приводят к неличным результатам и останавливают потоки выполнения, где неличные результаты происходят. Эти опции не доступны для анализа Bug Finder.
Анализ принимает, что переменные с плавающей точкой с неизвестными значениями могут иметь любое значение, позволенное их типом, включая бесконечный или NaN. Переменные с плавающей точкой с неизвестными значениями включают энергозависимые переменные и возвращаемые значения заблокированных функций.
Анализ не позволяет бесконечности и NaNs. Например, в этом режиме:
Анализ Программы автоматического доказательства Кода производит красную проверку на операции с плавающей точкой, которая производит бесконечность или NaN как единственный возможный результат на всех путях к выполнению. Верификация производит оранжевую проверку на операции с плавающей точкой, которая может потенциально произвести бесконечность или NaN.
Анализ Программы автоматического доказательства Кода принимает, что переменные с плавающей точкой с неизвестными значениями являются полным диапазоном, но конечный.
Анализ Bug Finder показывает сравнения с бесконечностью с помощью isinf
как мертвый код.
Стандарт IEEE® 754 позволяет специальные количества, такие как бесконечности и NaN
так, чтобы можно было обработать определенные числовые исключения, не отменяя код. Некоторые реализации стандартных бесконечностей поддержки C и NaN
.
Если ваш компилятор поддерживает бесконечности и NaN
s и вы объясняете их явным образом в вашем коде, используете эту опцию так, чтобы верификация также позволила им.
Например, если деление приводит к бесконечности к вашему коду, вы задаете альтернативное действие. Поэтому вы не хотите, чтобы верификация подсветила операции деления тот результат в бесконечности.
Если ваш компилятор поддерживает бесконечности и NaN
s, но вы не уверены, объясняете ли вы их явным образом в вашем коде, используйте эту опцию так, чтобы верификация включила бесконечности и NaN
s. Используйте опции -check-nan
и -check-infinite
с аргументом warn
так, чтобы верификация подсветила операции, которые приводят к бесконечностям и NaN
s, но не останавливает поток выполнения. Эти опции не доступны для анализа Bug Finder.
Если при запуске анализ Программы автоматического доказательства Кода и используете эту опцию, средства проверки для переполнения, деления на нуль и других числовых ошибок времени выполнения отключены. Смотрите Числовые Проверки.
Если при запуске анализ 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®, если вы устанавливаете свой курсор на |
Параметр: -allow-non-finite-floats |
Значение по умолчанию: Off |
Пример (Bug Finder):
Polyspace Bug Finder - источники |
Пример (Программа автоматического доказательства Кода):
Polyspace Code Prover - источники |
Пример (Сервер Bug Finder):
сервер средства поиска ошибки полипробела - источники |
Пример (Сервер Программы автоматического доказательства Кода):
сервер программы автоматического доказательства полипробела кода - источники |
Infinities (-check-infinite)
| NaNs (-check-nan)
| Числовые проверки | Числовые дефекты