Sun Studio 12: C User's Guide

D.1.1 Precision of Floating Point Evaluators

5.2.4.2.2 Characteristics of floating types <float.h>

The values of operations with floating operands, and the values that are subject to both the usual arithmetic conversions and to floating constants are evaluated to a format whose range and precision may be greater than required by the type. The use of evaluation formats is characterized by the implementation-defined value of FLT_EVAL_METHOD:

Table D–1 The FLT_EVAL_METHOD Values

Value  

Meaning  

-1 

Indeterminable. 

The compiler evaluates all operations and constants just to the range and precision of the type. 

The compiler evaluates operations and constants of type float and double to the range and precision of a double. Evaluate long double operations and constants to the range and precision of a long double. 

The compiler evaluates all operations and constants to the range and precision of a long double. 

When you include float.h on SPARC architectures, FLT_EVAL_METHOD expands to 0 by default and all floating point expressions are evaluated according to their type.

When you include float.h on x86 architectures, FLT_EVAL_METHOD expands to -1 by default (except when -xarch=sse2 or -xarch=amd64), and all floating point constant expressions are evaluated according to their type and all other floating point expressions are evaluated as long double.

When you specify -flteval=2 and include float.h, FLT_EVAL_METHOD expands to 2 and all floating expressions are evaluated as long double. See B.2.20 -flteval[={any|2}] for more information.

When you specify -xarch=sse2 or -xarch=amd64 on x86, and include float.h, FLT_EVAL_METHOD expands to 0 and all floating point expressions are evaluated according to their type.

The -Xt option does not affect the expansion of FLT_EVAL_METHOD, even though float expressions are evaluated as double. See B.2.63 -X[c|a|t|s] for more information.

The -fsingle option causes float expressions to be evaluated with single precision. See B.2.27 -fsingle for more information.

When you specify -fprecision on x86 architectures with -xarch=sse2 or -xarch=amd64 and include float.h, FLT_EVAL_METHOD expands to -1.