-float-rounding-mode)Задайте режимы округления, которые нужно учитывать при определении результатов арифметики с плавающей точкой
Эта опция влияет только на анализ Code Prover.
Задайте режимы округления, которые нужно учитывать при определении результатов арифметики с плавающей точкой.
Пользовательский интерфейс (только для настольных продуктов): В строении проекта опция доступна на узле Verification Assumptions.
Командная строка и файл опций: Используйте опцию -float-rounding-mode. См. «Информация о командной строке».
По умолчанию верификация использует режим «округление к ближайшему».
Используйте режим округления all если ваш код содержит стандартные программы, как fesetround чтобы задать режим округления, отличный от режима округления до ближайшего. Хотя верификация игнорирует fesetround спецификация учитывает все режимы округления, включая заданный режим округления. Кроме того, для целей, которые могут использовать расширенную точность (для образца, использование флага -mfpmath=387), используйте режим округления all. Однако для вашего Polyspace® результаты анализа, чтобы согласиться с поведением во время выполнения, вы должны предотвратить использование расширенной точности через флаг, такой как -ffloat-store.
В противном случае продолжите использовать режим округления по умолчанию to-nearest. Потому что все режимы округления рассматриваются, когда вы задаете all, у вас может быть много проверок оранжевого Overflow, возникающих в результате сверхприближения.
По умолчанию: 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 _ рабочий стол является папкой установки Polyspace, например polyspacerootC:\Program Files\Polyspace\R2019a.
Чтобы предотвратить использование расширенной точности, на целях без поддержки SSE, можно использовать флаг, такой как -ffloat-store. Для анализа Polyspace используйте all для режима округления, учитывающего двойное округление.
При проверке Overflow используются заданные вами режимы округления. Например, в следующей таблице показано различие в результате проверки при изменении режимов округления.
Режим округления: to-nearest | Режим округления: all | ||
|---|---|---|---|
Если результаты операций с плавающей точкой округлены до ближайших значений:
| Кроме ближайшего режима, проверка Overflow учитывает и другие режимы округления.
|
Если вы задаете режим округления all и получите оранжевую проверку Overflow, чтобы определить, как может произойти переполнение, рассмотрите все режимы округления.
Параметр: -float-rounding-mode |
Значение: to-nearest | all |
По умолчанию: to-nearest |
Пример (Code Prover): Polyspace Code Prover -sources |
Пример (Код Prover Server):
Полипространство -code-prover-server -sources file_name |