C Standard Library

C <fenv.h> - FE_INEXACT



The FE_INEXACT macro expands to a value of type integer constant expression that is distinct powers of 2, which uniquely identifies the floating-point exception raised on inexact results.

Inexact exceptions are raised when the return type of an operation cannot represent the result with exact accuracy (for example - 1.0/3.0 or sqrt(2.0) on most implementations), or when a function cannot produce an exact result for some other reason.

Definition in the <fenv.h> header file is:

#define FE_INEXACT  /*implementation defined power of 2*/ 

The details about all floating-point exception macros are listed below:

MacrosDescription
FE_DIVBYZERO Pole error exception occurred in an earlier floating-point operation.
FE_INEXACT Inexact result exception occurred in an earlier floating-point operation (rounding was necessary to store the result).
FE_INVALID Invalid argument exception occurred (domain error occurred) in an earlier floating-point operation.
FE_OVERFLOW Overflow range error exception occurred in an earlier floating-point operation (result was too large to be representable).
FE_UNDERFLOW Underflow range error exception occurred in an earlier floating-point operation (result was subnormal with a loss of precision).
FE_ALL_EXCEPT Bitwise OR of all supported floating-point exceptions.

Certain library implementations may define additional macro constants in <fenv.h> to identify additional floating-point exceptions (with their corresponding macros also beginning with FE_).

See math_errhandling for more details.

Example:

The example below shows the usage of FE_INEXACT macro.

#include <stdio.h>
#include <fenv.h>

#pragma STDC FENV_ACCESS ON

//volatile not needed if FENV_ACCESS is supported
volatile double three = 3.0; 
 
int main (){
  printf("1.0/3.0 = %f\n", (1.0/three));
  if(fetestexcept(FE_INEXACT))
    printf("Inexact result is reported.\n");
  else
    printf("Inexact result is not reported.\n");

  return 0;
}

The output of the above code will be:

1.0/3.0 = 0.333333
Inexact result is reported.

❮ C <fenv.h> Library