floating-literal:fractional-constantexponent-part_{opt}floating-suffix_{opt}digit-sequenceexponent-partfloating-suffix_{opt}

fractional-constant:digit-sequence_{opt}.digit-sequencedigit-sequence.

exponent-part: esign_{opt}digit-sequenceEsign_{opt}digit-sequence

sign: one of + -

digit-sequence:digitdigit-sequencedigit

floating-suffix: one of f l F L

A floating literal consists of an integer part, a decimal point, a
fraction part, an
e or E, an optionally signed integer exponent, and an
optional type suffix. The integer and fraction parts both consist of a
sequence of decimal (base ten) digits. Either the integer part or the
fraction part (not both) can be omitted; either the decimal point or the
letter e (or E ) and the exponent (not both) can be
omitted. The integer part, the optional decimal point and the optional
fraction part form the *significant part* of the
floating literal. The exponent, if present, indicates the power of 10 by
which the significant part is to be scaled. If the scaled value is in
the range of representable values for its type, the result is the scaled
value if representable, else the larger or smaller representable value
nearest the scaled value, chosen in an implementation-defined manner.
The type of a floating literal is double
unless explicitly specified by a suffix.
The suffixes f and F specify float,
the suffixes l and L specify long
double. If the scaled value is not in the range of representable
values for its type, the program is ill-formed.