You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Prevent math errors by carefully bounds-checking before calling functions. In particular, the following domain errors should be prevented by prior bounds-checking:

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.

Non-Compliant Example

The following 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.

float x, y, result;

result = pow(x,y);

Compliant Solution

The following code tests x and y to ensure that there will be no range or domain errors.

float x, y, result;

if(x == 0 && y <=0){
     /* handle domain error condition */
}

result = pow(x, y);

References

  • No labels