Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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( y, x )

x != 0 || y != 0

log( x ), log10( x )

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.

Anchor
ArcTrig
ArcTrig

acos( x ), asin( x )

Non-Compliant Code Example

...

Code Block
float x, result;

if( islessequal(x,-1) || isgreaterequal(x, 1) ){
     /* handle domain error */
}

result = acos(x);

Anchor
ArcTan
ArcTan

atan2( y, x )

Non-Compliant Code Example

...

Code Block
float x, y, result;

if( fpclassify(x) == FP_ZERO && fpclassify(y) == FP_ZERO){
     /* handle domain error */
}

result = atan2(y, x);

Anchor
Log
Log

log( x ), log10( x )

Non-Compliant Code Example

...

Code Block
float result, x;

if(islessequal(x, 0)){
     /* handle domain and range errors */
}

result = log(x);

Anchor
Power
Power

pow( x, y )

Non-Compliant Code Example

...

Code Block
float x, y, result;

if(fpclassify(x) == FP_ZERO && islessequal(y, 0)){
     /* handle domain error condition */
}

result = pow(x, y);

Anchor
Sqrt
Sqrt

sqrt( x )

Non-Compliant Code Example

...