...
Function | Bounds-checking |
---|---|
acos(x), asin(x) | -1 <= x && x <= 1 |
atan2 | x != 0 || y != 0 |
log, log10 | x >= 0 |
pow(x, y) | x != 0 || y > 0 |
sqrt(x) | x >= 0 |
The calling function should take alternative action if these bounds are violated.
acos
...
, asin
...
Non-Compliant Code Example
Wiki Markup |
---|
The followingThis code may produce a domain error if the argument is not in the range \[-1, \+1\]. |
Code Block |
---|
float x, result; result = acos(x); |
Compliant
...
Solution
The following This code uses bounds checking to ensure there is not a domain error.
Code Block |
---|
float x, result; if( islessequal(x,-1) || isgreaterequal(x, 1) ){ /* handle domain error */ } result = acos(x); |
atan2(y, x)
Non-Compliant
...
Code Example
The following This code may produce a domain error if both x and y are zero.
Code Block |
---|
float x, y, result; result = atan2(y, x); |
Compliant Solution
The following This code tests the arguments to ensure that there is not a domain error.
Code Block |
---|
float x, y, result; if( fpclassify(x) == FP_ZERO && fpclassify(y) == FP_ZERO){ /* handle domain error */ } result = atan2(y, x); |
log
...
, log10
...
Non-Compliant Code Example
The following This code may produce a domain error if x is negative and a range error if x is zero.
Code Block |
---|
float result, x; result = log(x); |
Compliant
...
Solution
The following This code tests the suspect arguments to ensure no domain or range errors are raised.
Code Block |
---|
float result, x; if(islessequal(x, 0)){ /* handle domain and range errors */ } result = log(x); |
pow(x,y)
Non-Compliant Code Example
The following This code may produce a domain error if x is zero and y less than or equal to zero. A range error may also occur if x is zero and y is negative.
Code Block |
---|
float x, y, result; result = pow(x,y); |
Compliant Solution
The following This code tests x and y to ensure that there will be no range or domain errors.
Code Block |
---|
float x, y, result; if(fpclassify(x) == FP_ZERO && islessequal(y, 0)){ /* handle domain error condition */ } result = pow(x, y); |
sqrt
...
Non-Compliant
...
Code Example
The following This code may produce a domain error if x is negative.
Code Block |
---|
float x, result; result = sqrt(x); |
Compliant Solution
The following This code tests the suspect argument to ensure no domain error is raised.
...