Submitter:Fred Tydeman
Submission Date: 2018-12-12
Document: WG14 N2326
Reference Documents: N1677, N1870, N1871, N2092

Summary

This is the combined fixes for DRs 432 and 467 against C2X.

The vocabulary document (ISO/IEC 2382:2015) does not define "normalized floating point number". It does define "normalization" as shifting the mantissa (and adjusting exponent) so that the mantissa is in a specific range.

If long double is a pair of doubles and the high double has the value DBL_MAX and the low double has the value (DBL_MIN-DBL_TRUE_MIN), the leftmost digit is non-zero, yet this is not a normalized floating point number. That number has 53 one bits, followed by around 2000 zero bits, followed by 52 one bits. None of the 2000 zero bits can be one (otherwise the DBL_MIN-DBL_TRUE_MIN part will be lost).

Suggested Technical Corrigendum:

In §5.2.4.2.2 #2 after the definition of the floating point model parameters, add:

For each floating-point type: b, p, emin, and emax, are fixed constants.

The first sentance in §5.2.4.2.2 #3

A floating-point number (x) is defined by the following model:

should be changed to:

For each floating-point type, aA floating-point number (x) is defined by the following model:

The first sentance in §5.2.4.2.2 #4

In addition to normalized floating-point numbers (f1 > 0 if x!=0), floating types may be able to contain other kinds of floating-point numbers, such as subnormal floating-point numbers ....

should be changed to:

In addition to Floating types shall be able to represent zero (all fk = 0) and all normalized floating-point numbers (f1 > 0 ; 0 if x!=0 and all possible k digits and e exponents result in values representable in the typefootnote). In addition, floating types may be able to contain other kinds of floating-point numbers, such as negative zero, subnormal floating-point numbers ....

footnote: Some implementations may have types with finite numeric values which are not covered by this model.

In §5.2.4.2.2 #13, first item (*_MAX), change the phrase

maximum representable finite floating-point number, [ math formula ]

to

maximum representable finite floating-point number; if that number is normalized, its value is [ math formula ],

In §5.2.4.2.2#14, first item (*_EPSILON), change the phrase

the difference between 1 and the least value greater than 1

to

the difference between 1 and the least normalized value greater than 1