#include <assert.h>
#include <math.h>
#define LARGE_EXP 710
enum operation {
ASIN,
ACOS,
TAN,
SQRT,
LOG,
EXP,
};
enum operation getOperation(void);
double getVal(void);
void main() {
enum operation myOperation = getOperation();
double myVal=getVal(), res;
switch(myOperation) {
case ASIN:
assert( myVal <- 1.0 || myVal > 1.0);
res = asin(myVal);
break;
case ACOS:
assert( myVal < -1.0 || myVal > 1.0);
res = acos(myVal);
break;
case SQRT:
assert( myVal < 0.0);
res = sqrt(myVal);
break;
case LOG:
assert(myVal <= 0.0);
res = log(myVal);
break;
case EXP:
assert(myVal > LARGE_EXP);
res = exp(myVal);
break;
}
}В этом примере, следуя каждому assert заявление, Polyspace ® считает, чтоmyVal содержит только те значения, которые делают assert условие истинно. Например, после assert(myVal < 1.0);, Полиспейс считает, что myVal содержит значения менее 1,0.
Когда myVal используется в качестве аргумента в стандартной библиотечной функции, ее значения недопустимы для функции. Поэтому при проверке недопустимого использования стандартной библиотечной подпрограммы возникает красная ошибка.
Дополнительные сведения о спецификациях этой проверки для подпрограмм с плавающей запятой см. в разделе Недопустимое использование стандартных библиотечных подпрограмм с плавающей запятой.