Consider non finite floats (-allow-non-finite-floats)

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

Описание

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

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

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

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

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

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

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

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

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

Bug Finder

Если анализ отмечает сравнения с помощью isinf или isnan как мертвый код, используйте эту опцию. По умолчанию анализ Bug Finder не включает бесконечности и NaNs.

Настройки

On

Анализ позволяет бесконечности и NaNs. Например, в этом режиме:

  • Анализ принимает, что операции с плавающей точкой могут привести к результатам, таким как бесконечности и NaNs.

    При помощи опций Infinities (-check-infinite) и NaNs (-check-nan), можно принять решение подсветить операции, которые приводят к неличным результатам и останавливают потоки выполнения, где неличные результаты происходят. Эти опции не доступны для анализа Bug Finder.

  • Анализ принимает, что переменные с плавающей точкой с неизвестными значениями могут иметь любое значение, позволенное их типом, включая бесконечный или NaN. Переменные с плавающей точкой с неизвестными значениями включают энергозависимые переменные и возвращаемые значения заблокированных функций.

От (значения по умолчанию)

Анализ не позволяет бесконечности и NaNs. Например, в этом режиме:

  • Анализ Программы автоматического доказательства Кода производит красную проверку на операции с плавающей точкой, которая производит бесконечность или NaN как единственный возможный результат на всех путях к выполнению. Верификация производит оранжевую проверку на операции с плавающей точкой, которая может потенциально произвести бесконечность или NaN.

  • Анализ Программы автоматического доказательства Кода принимает, что переменные с плавающей точкой с неизвестными значениями являются полным диапазоном, но конечный.

  • Анализ Bug Finder показывает сравнения с бесконечностью с помощью isinf как мертвый код.

Советы

  • Стандарт IEEE® 754 позволяет специальные количества, такие как бесконечности и NaN так, чтобы можно было обработать определенные числовые исключения, не отменяя код. Некоторые реализации стандартных бесконечностей поддержки C и NaN.

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

      Например, если деление приводит к бесконечности к вашему коду, вы задаете альтернативное действие. Поэтому вы не хотите, чтобы верификация подсветила операции деления тот результат в бесконечности.

    • Если ваш компилятор поддерживает бесконечности и NaNs, но вы не уверены, объясняете ли вы их явным образом в вашем коде, используйте эту опцию так, чтобы верификация включила бесконечности и NaNs. Используйте опции -check-nan и -check-infinite с аргументом warn так, чтобы верификация подсветила операции, которые приводят к бесконечностям и NaNs, но не останавливает поток выполнения. Эти опции не доступны для анализа Bug Finder.

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

    Если при запуске анализ Bug Finder и используете эту опцию:

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

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

    Бесконечности и 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 соответственно в подсказке.

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

Параметр: -allow-non-finite-floats
Значение по умолчанию: Off
Пример (Bug Finder): Polyspace Bug Finder - источники file_name - позвольте не конечные плавания
Пример (Программа автоматического доказательства Кода): Polyspace Code Prover - источники file_name - позвольте не конечные плавания
Пример (Сервер Bug Finder): сервер средства поиска ошибки полипробела - источники file_name - позвольте не конечные плавания
Пример (Сервер Программы автоматического доказательства Кода): сервер программы автоматического доказательства полипробела кода - источники file_name - позвольте не конечные плавания
Введенный в R2016a