**Document:** WG14 N1378

**Submitter:** Fred Tydeman (USA)

**Submission Date:** 2009-03-31

**Previous version of paper:** N1303, N1317, N1352

**Related WG14 documents:** N1151, N1171

**Related WG21 documents:** N2798

**Subject:** xxx_TRUE_MIN macros for <float.h>

Existing practice: Many implementation have macros (with various spellings) for the minimum positive subnormal numbers. C++ has similar symbols.

This is a rewrite based upon feedback from the committee.

**Changes to C1x**

Add new bullets to **5.2.4.2.2 Characteristics of floating
types <float.h>**

[bullet after FLT_MIN] minimum positive floating-point number. If subnormal numbers are present, their value is the minimum positive subnormal (also known as denormal) floating-point number, otherwise the minimum positive normal floating-point number, of the respective types.

FLT_TRUE_MIN 1E-37DBL_TRUE_MIN 1E-37LDBL_TRUE_MIN 1E-37

[bullet after FLT_MIN] The presence or absence of subnormal numbers are characterized by the values:

-1Indeterminate (cannot be determined if type allows subnormal values)0Absent (type does not allow subnormal values)+1Present (type does allow subnormal values and operations on those values follow IEC 60559)

for each respective type via:

FLT_HAS_SUBNORMDBL_HAS_SUBNORMLDBL_HAS_SUBNORM

[paragraph 15, example 2] Remove "normalized" from just before IEC 60559.

Add

afterFLT_TRUE_MIN 1.40129846E-45 //decimal constantFLT_TRUE_MIN 0X1P-149F //hex constantFLT_HAS_SUBNORM +1DBL_TRUE_MIN 4.9406564584124654E-324 //decimal constantDBL_TRUE_MIN 0X1P-1074 //hex constantDBL_HAS_SUBNORM +1

**Words for Rationale:**

[add to 5.2.4.2.2 section] For applications that need to check, at translation time, if subnormal floating-point numbers are supported, can check for xxx_HAS_SUBNORM having the value +1, where xxx is FLT, DBL, or LDBL.

The values of the smallest subnormal floating-point numbers (if supported) are typically, but not always, FLT_MIN*FLT_EPSILON, DBL_MIN*DBL_EPSILON, LDBL_MIN*LDBL_EPSILON.