FLT_EVAL_METHOD
From cppreference.com
Defined in header <float.h>


#define FLT_EVAL_METHOD /* implementation defined */ 
(since C99)  
Specifies range and precision of floatingpoint values obtained from floatingpoint constants and from all operations (operators, implicit conversions of operands) except assignment, cast, and library function call.
Value  Explanation 
negative values except 1

implementationdefined behavior 
1

the default precision is not known 
0

all operations and constants evaluate in the range and precision of the type used. Additionally, float_t and double_t are equivalent to float and double respectively 
1

all operations and constants evaluate in the range and precision of double. Additionally, both float_t and double_t are equivalent to double 
2

all operations and constants evaluate in the range and precision of long double. Additionally, both float_t and double_t are equivalent to long double 
[edit] Notes
Regardless of the value of FLT_EVAL_METHOD, any floatingpoint expression may be contracted, that is, calculated as if all intermediate results have infinite range and precision (unless #pragma STDC FP_CONTRACT is off)
Cast and assignment strip away any extraneous range and precision: this models the action of storing a value from an extendedprecision FPU register into a standardsized memory location.
[edit] See also
(C99)(C99) 
most efficient floatingpoint type at least as wide as float or double (typedef) 
C++ documentation for FLT_EVAL_METHOD
