The floating point data types are used to represent real numbers (i.e. numbers
representable via a decimal expansion). Up to three different sizes of
floating point numbers can be defined, as shown below.

float // 32 bit
double // 64 bit (internal 80 maybe)
long double // 64 or 80 bit

It is guaranteed that:

precision of float <= precision of double <= precision of long double.

## Floating Point Constants

A floating point constant consists of:

- a sequence of digits specifying the integer component,
- a decimal point and
- a sequence of digits specifying the decimal component.
- Additionally, an 'e' (or 'E') followed by a signed integer exponent may be appended.
- A suffix may be formed by selecting zero or one letter from set {f,l} (case
unimportant). When the suffix 'f' is added, the constant is of type float. When
the suffix 'l' is added, the constant is of type long double. When no suffix is
present, the type of the constant is double.

Either the integer or decimal part of the constant may be missing, but not
both. Either the decimal point or the exponent may be missing, but not both.

## Examples

double a,b,c; // three uninitialized numbers
double d = 100.001; // a number holding 100.001
double e = 1e2; // a number holding 100 = 1 x 10*10
double f = 1e-2; // a number holding .01 - negative exponent
double g = .01; // a number holding .01 - integer part missing
double h = 1.1e2; // a number holding 110 - all parts present