Неверные аргументы для стандартной библиотечной функции
Этот дефект возникает при использовании недопустимых аргументов с функцией с плавающей запятой из стандартной библиотеки. Этот дефект обнаруживается:
Процедуры округления и абсолютного значения
ceil, fabs, floor, fmod
Дроби и процедуры деления
fmod, modf
Экспоненты и процедуры регистрации
frexp, ldexp, sqrt, pow, exp, log, log10
Процедуры функции тригонометрии
cos, sin, tan, acos, asin, atan, atan2, cosh, sinh, tanh, acosh, asinh, atanh
Ошибки домена в стандартных библиотечных функциях с плавающей запятой приводят к значениям, определенным для реализации. При использовании возвращаемого значения функции в последующих вычислениях можно увидеть неожиданные результаты.
Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Этот список событий используется для определения того, как аргумент функции получает недопустимые значения. Исправление может быть реализовано для любого события в последовательности. Если сведения о результатах не отображают историю событий, можно выполнить обратную трассировку, щелкнув правой кнопкой мыши параметры в исходном коде и просмотреть предыдущие связанные события. См. также раздел Интерпретация результатов поиска ошибок в интерфейсе пользователя Polyspace Desktop.
Рекомендуется обрабатывать ошибки домена перед использованием стандартной библиотечной функции с плавающей запятой. Например, перед вызовом acos функция, проверьте, находится ли аргумент в [-1.0, 1.0], и обработайте ошибку.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, например, при обработке бесконечностей в коде, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
| Группа: Числовые |
| Язык: C | C++ |
| По умолчанию: Вкл. |
Синтаксис командной строки: FLOAT_STD_LIB |
| Воздействие: Высокое |
| CWE ID: 227, 369, 682, 873 |
Find defects (-checkers) | Invalid use of standard library integer routine | Invalid use of standard library memory routine | Invalid use of standard library routine | Invalid use of standard library string routine