-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 Code Prover Access).
Если при запуске анализ Средства поиска Ошибки и используете эту опцию:
Средства проверки для переполнения и деления на нуль отключены. Смотрите Числовые Дефекты (Polyspace Bug Finder Access).
Средство проверки Floating point comparison with equality operators
(Polyspace Bug Finder Access) может показать ложные положительные стороны.
Если вы выбираете эту опцию, номер и тип Программы автоматического доказательства Кода регистрируются в вашем коде, может измениться.
Например, в следующем примере, когда вы выбираете опцию, результаты имеют тот меньше красной проверки и три более зеленых проверки.
Бесконечности и 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 |
Пример (Средство поиска Ошибки):
Polyspace Bug Finder - источники |
Пример (Программа автоматического доказательства Кода):
Polyspace Code Prover - источники |
Пример (Сервер Средства поиска Ошибки):
сервер средства поиска ошибки полипробела - источники |
Пример (Сервер Программы автоматического доказательства Кода):
сервер программы автоматического доказательства полипробела кода - источники |
Infinities (-check-infinite)
| NaNs (-check-nan)
| Числовые дефекты (Polyspace Bug Finder Access) | числовые проверки (Polyspace Code Prover Access)