Программа Polyspace ® Code Prover™ выполняет проверку недопустимого использования стандартной библиотечной подпрограммы в стандартных библиотечных подпрограммах, чтобы определить, являются ли их аргументы допустимыми. Проверка работает по-разному для подпрограмм памяти, подпрограмм с плавающей запятой или строковых подпрограмм, поскольку их аргументы могут быть недопустимыми по-разному. В этом разделе описывается работа проверки для стандартных библиотечных подпрограмм с плавающей запятой.
Дополнительные сведения о проверке см. в разделе Invalid use of standard library routine.
Проверка «Недопустимое использование стандартной библиотечной подпрограммы» последовательно выполняет поиск следующих проблем при использовании подпрограмм с плавающей запятой.
Ошибка домена: ошибка домена возникает, если аргументы функции недопустимы. Определение недопустимого аргумента варьируется в зависимости от того, разрешены ли неграничные плавающие значения или нет. Если разрешены неграничные плавающие значения, но:
Укажите, что вы должны быть предупреждены о результатах NaN, ошибка домена возникает, если функция возвращает NaN, а сами аргументы не являются NaN.
Укажите, что результаты NaN должны быть запрещены, если функция возвращает NaN или сами аргументы являются NaN, возникает ошибка домена.
Для получения более подробной информации см. NaNs (-check-nan).
Чек работает почти так же, как чек Invalid operation on floats. Проверка «Недопустимое использование стандартной библиотечной подпрограммы» (Invalid Use of Standard Library Routine) работает со стандартными библиотечными функциями, а проверка «Недопустимая операция с плавающей запятой» (Invalid Operation on Floats) работает с числовыми операциями, включающими переменные с плавающей запятой.
Ошибка переполнения: при переполнении функции возникает ошибка переполнения. Определение переполнения зависит от того, разрешены ли неграничные плавающие значения, и от заданных режимов округления. Если разрешить несграничные плавающие значения, но указать, что необходимо предупреждать о бесконечных результатах, возникает ошибка переполнения, если функция возвращает бесконечность, а сами аргументы не являются бесконечностью. Для получения более подробной информации см. Infinities (-check-infinite).
Проверка работает так же, как и проверка Overflow. Проверка «Недопустимое использование стандартной библиотечной подпрограммы» (Invalid Use of Standard Library Routine) работает со стандартными библиотечными функциями, а проверка «Переполнение» (Overflow) - с числовыми операциями с переменными с плавающей запятой.
Недопустимый аргумент указателя: Для таких функций, как frexp , которые принимают аргументы указателя, проверка проверяет, допустимо ли отменить привязку указателя. Например, указатель не имеет значение NULL или не указывает за пределы допустимых границ.
Проверка последовательно ищет эти ошибки.
Если проверка обнаруживает определенную ошибку домена, она не ищет ошибку переполнения.
Если проверка обнаруживает возможную ошибку домена, она ищет ошибку переполнения только для путей выполнения, в которых ошибка домена не возникает.
Проверка каждой ошибки сама по себе может состоять из нескольких условий, которые также проверяются последовательно. Каждая проверка выполняется только для тех путей выполнения, по которым проходит предыдущая проверка.
Проверка недопустимого использования стандартной библиотечной подпрограммы охватывает следующие процедуры, их версии с одной точностью и суффиксом f (если они имеют один) и их длинные двойные версии с суффиксом l. Проверка работает точно так же для кода C и C++.
acos
acosh
asin
asinh
atan
atanh
ceil
cos
cosh
exp
exp2
expm1
fabs
floor
log
log10
log1p
logb
round
sin
sinh
sqrt
tan
tanh
trunc
cbrt
Проверка недопустимого использования стандартной библиотечной подпрограммы охватывает следующие процедуры, их версии с одной точностью и суффиксом f (если они имеют один) и их длинные двойные версии с суффиксом l. Проверка работает точно так же для кода C и C++.
atan2
fdim
fma
fmax
fmin
fmod
frexp
hypot
ilogb
ldexp
modf
nextafter
nexttoward
pow
remainder
Consider non finite floats (-allow-non-finite-floats) | Float rounding mode (-float-rounding-mode)