Versions Compared

Key

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

...

Function

Bounds-checking

acos(x)(error), asin(x) (error)

-1 <= x && x <= 1

atan2

x != 0 || y != 0

log, log10

x >= 0

pow(x, y)

x != 0 || y > 0

sqrt(x) (error)

x >= 0

The calling function should take alternative action if these bounds are violated.

acos

...

(error), asin

...

(error)

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

...

(error), log10

...

(error)

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

...

(error)

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.

...