The type of a *floating-point-literal* is determined by
its *floating-point-suffix* as specified in Table 9.

Table 9: Types of *floating-point-literal**s* [tab:lex.fcon.type]

type | ||

none | double | |

f or F | float | |

l or L | long double |

The *significand* of a *floating-point-literal*
is the *fractional-constant* or *digit-sequence*
of a *decimal-floating-point-literal*
or the *hexadecimal-fractional-constant*
or *hexadecimal-digit-sequence*
of a *hexadecimal-floating-point-literal*.

In the significand,
the sequence of *digit**s* or *hexadecimal-digit**s*
and optional period are interpreted as a base N real number s,
where N is 10 for a *decimal-floating-point-literal* and
16 for a *hexadecimal-floating-point-literal*.

If an *exponent-part* or *binary-exponent-part*
is present,
the exponent e of the *floating-point-literal*
is the result of interpreting
the sequence of an optional *sign* and the *digit**s*
as a base 10 integer.

Otherwise, the exponent e is 0.

The scaled value of the literal is
for a *decimal-floating-point-literal* and
for a *hexadecimal-floating-point-literal*.

[*Example 1*: â€” *end example*]

If the scaled value is not in the range of representable
values for its type, the program is ill-formed.

Otherwise, the value of a *floating-point-literal*
is the scaled value if representable,
else the larger or smaller representable value nearest the scaled value,
chosen in an implementation-defined manner.