-float-rounding-mode)Определение режимов округления, учитываемых при определении результатов арифметики с плавающей запятой
Этот параметр влияет только на анализ программы проверки кода.
Укажите режимы округления, которые следует учитывать при определении результатов арифметики с плавающей запятой.
Пользовательский интерфейс (только для настольных ПК): в конфигурации проекта эта опция доступна в узле Проверочные допущения.
файл командной строки и параметров: Использовать параметр -float-rounding-mode. См. раздел Сведения о командной строке.
При проверке по умолчанию используется режим «округление до ближайшего».
Использовать режим округления all если код содержит такие процедуры, как fesetround для задания режима округления, отличного от округления до ближайшего. Хотя проверка игнорирует fesetround в спецификации рассматриваются все режимы округления, включая указанный режим округления. Альтернативно, для целей, которые могут использовать расширенную точность (например, с использованием флага -mfpmath=387), используйте режим округления all. Однако для согласования результатов анализа Polyspace ® с поведением во время выполнения необходимо предотвратить использование расширенной точности с помощью флага, например -ffloat-store.
В противном случае продолжайте использовать режим округления по умолчанию to-nearest. Поскольку при указании учитываются все режимы округления all, вы можете иметь много оранжевых проверок переполнения в результате чрезмерного приближения.
По умолчанию: to-nearest
to-nearest Проверка предполагает режим «от круглой до ближайшей».
all Проверка предполагает все режимы округления для каждой операции, включающей переменные с плавающей запятой. Рассматриваются следующие режимы округления: округление до ближайшего, округление до нуля, округление до положительной бесконечности и округление до отрицательной бесконечности.
В анализе Polyspace используется арифметика с плавающей запятой, соответствующая стандарту IEEE ® 754. Например, арифметика использует команды с плавающей запятой, присутствующие в наборе команд SSE. Флаг GNU ® C -mfpmath=sse принудительно использует этот набор команд. При использовании компилятора GNU C с этим флагом для компиляции кода результаты анализа Polyspace согласуются с поведением во время выполнения.
Однако, если код использует расширенную точность, например, с использованием флага GNU C -mfpmath=387в некоторых случаях результаты анализа Polyspace могут не совпадать с поведением во время выполнения. См. некоторые примеры этих угловых вариантов в codeprover_limitations.pdf в . Здесь, polyspaceroot\polyspace\verifier\code_prover_desktop является папкой установки Polyspace, например, polyspacerootC:\Program Files\Polyspace\R2019a.
Для предотвращения использования расширенной точности на целях без поддержки SSE можно использовать флаг, например -ffloat-store. Для анализа Polyspace используйте all для режима округления для учета двойного округления.
Проверка переполнения использует указанные режимы округления. Например, в следующей таблице показана разница в результате проверки при изменении режимов округления.
Режим округления: to-nearest | Режим округления: all | ||
|---|---|---|---|
Если результаты операций с плавающей запятой округляются до ближайших значений:
| Помимо ближайшего режима, проверка переполнения также учитывает другие режимы округления.
|
Если установлен режим округления all и получите оранжевую проверку переполнения, чтобы определить, как может произойти переполнение, рассмотрим все режимы округления.
Параметр: -float-rounding-mode |
Значение: to-nearest | all |
По умолчанию: to-nearest |
Пример (проверка кода): polyspace-code-prover -sources |
Пример (сервер проверки кода):
polyspace-code-prover-server -sources |