Рассмотрите не конечные плавания (-allow-non-finite-floats)

Включите аналитический режим, который включает бесконечности и NaNs

Описание

Включите аналитический режим, который включает бесконечности и NaNs для операций с плавающей точкой.

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Check Behavior.

Командная строка: Используйте опцию -allow-non-finite-floats. Смотрите информацию о Командной строке.

Почему использование эта опция

Программа автоматического доказательства кода

По умолчанию анализ не включает бесконечности и NaNs. Например, анализ отключает поток выполнения, где деление на нуль происходит и не полагает, что результат мог быть бесконечным.

Если вы используете функции, такие как isinf или isnan и объясняете бесконечности и NaNs в вашем коде, устанавливаете эту опцию. Когда вы устанавливаете эту опцию, и деление на нуль происходит, например, поток выполнения продолжает бесконечность как результат деления.

Установите одну только эту опцию, если вы уверены, что объяснили бесконечности и NaNs в вашем коде. Используя одну только опцию эффективно отключает много числовых проверок на операциях с плавающей точкой. Если вы обычно объясняли бесконечности и NaNs, но вы не уверены, что рассмотрели все ситуации, установил эти дополнительные опции:

Средство поиска ошибки

Если анализ отмечает сравнения с помощью 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, но не останавливает поток выполнения. Эти опции не доступны для анализа Средства поиска Ошибки.

  • Если при запуске анализ Программы автоматического доказательства Кода и используете эту опцию, средства проверки для переполнения, деления на нуль и других числовых ошибок времени выполнения отключены. Смотрите Числовые Проверки.

    Если при запуске анализ Средства поиска Ошибки и используете эту опцию:

  • Если вы выбираете эту опцию, номер и тип Программы автоматического доказательства Кода регистрируются в вашем коде, может измениться.

    Например, в следующем примере, когда вы выбираете опцию, результаты имеют тот меньше красной проверки и три более зеленых проверки.

    Бесконечности и 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;
    }

    Анализ принимает что, делясь на нулевые результаты в:

    • Значение x равняется Inf

    • Значение y равняется 0,0

    • Значение z равняется NaN

    В ваших результатах анализа в пользовательском интерфейсе Polyspace®, если вы устанавливаете свой курсор на y и z, вы видите неличные значения Inf и NaN соответственно в подсказке.

  • Вы не можете запустить Автоматический Оранжевый Тестер в Программе автоматического доказательства Кода, если вы включаете non-finites в свой анализ.

Информация о командной строке

Параметр: -allow-non-finite-floats
Значение по умолчанию: 'off'
Пример (средство поиска ошибки): polyspace-bug-finder -sources file_name -allow-non-finite-floats
Пример (программа автоматического доказательства кода): polyspace-code-prover -sources file_name -allow-non-finite-floats
Пример (сервер средства поиска ошибки): polyspace-bug-finder-server -sources file_name -allow-non-finite-floats
Пример (сервер программы автоматического доказательства кода): polyspace-code-prover-server -sources file_name -allow-non-finite-floats

Введенный в R2016a