Переполнение при преобразовании между типами данных с плавающей запятой
Этот дефект возникает при преобразовании числа с плавающей запятой в меньший тип данных с плавающей запятой. Если у переменной недостаточно памяти для представления исходного числа, преобразование переполняется.
Точное распределение ресурсов хранения для различных типов с плавающей запятой зависит от процессора. Посмотрите Target processor type (-target).
Переполнение может привести к непредсказуемым значениям из вычислений. Результатом может быть бесконечность или максимальное конечное значение в зависимости от режима округления, используемого в реализации. Если в последующих расчетах использовать результат преобразования переполнения и не учитывать переполнение, можно увидеть неожиданные результаты.
Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Используйте этот список событий, чтобы определить, как преобразуемая переменная получает свое текущее значение Вы можете реализовать исправление для любого события в последовательности. Если сведения о результатах не отображают историю событий, можно выполнить обратную трассировку, щелкнув правой кнопкой мыши параметры в исходном коде и просмотреть предыдущие связанные события. См. также раздел Интерпретация результатов поиска ошибок в интерфейсе пользователя Polyspace Desktop.
Устранить дефект можно путем:
Использование большего типа данных для результата преобразования для согласования всех значений.
Проверка значений, которые приводят к переполнению, и выполнение соответствующей обработки ошибок.
Как правило, избегайте преобразований в меньшие типы с плавающей запятой.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
| Группа: Числовые |
| Язык: C | C++ |
| По умолчанию: Вкл. |
Синтаксис командной строки: FLOAT_CONV_OVFL |
| Воздействие: Высокое |
| CWE ID: 189, 197, 681 |
Find defects (-checkers) | Integer conversion overflow | Sign change integer conversion overflow | Unsigned integer conversion overflow