Polyspace® Code Prover™ выполняет проверку Invalid Use of Standard Library Routine для стандартных стандартных программ, чтобы определить, действительны ли их аргументы. Проверка работает по-разному для стандартных программ памяти, стандартных программ с плавающей точкой или строковых стандартных программ, поскольку их аргументы могут быть недопустимыми различными способами. В этом разделе описывается работа проверки для стандартных стандартных программ с плавающей точкой библиотеки.
Для получения дополнительной информации о проверке см. Invalid use of standard library routine.
Проверка 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 или не указывает за пределы допустимых границ.
Проверка ищет эти ошибки последовательно.
Если проверка находит определенную ошибку области, она не ищет ошибку переполнения.
Если проверка находит возможную ошибку области, она ищет ошибку переполнения только для путей выполнения, где ошибка области не возникает.
Проверка для каждой самой ошибки может состоять из нескольких условий, которые также проверяются последовательно. Каждая проверка выполняется только для тех путей выполнения, где прошла предыдущая проверка.
Проверка Invalid Use of Standard Library Routine охватывает следующие стандартные программы, их версии с одной точностью с помощью суффикса f (если у них есть одна) и их длинные двойные версии с суффиксом l. Проверка работает точно так же для 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
Проверка Invalid Use of Standard Library Routine охватывает следующие стандартные программы, их версии с одной точностью с помощью суффикса f (если у них есть одна) и их длинные двойные версии с суффиксом l. Проверка работает точно так же для 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)