Long double format
==================

  Each long double is made up of two IEEE doubles.  The value of the
long double is the sum of the values of the two parts (except for
-0.0).  The most significant part is required to be the value of the
long double rounded to the nearest double, as specified by IEEE.  For
Inf values, the least significant part is required to be one of +0.0
or -0.0.  No other requirements are made; so, for example, 1.0 may be
represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a NaN
is don't-care.

Classification
--------------

A long double can represent any value of the form
  s * 2^e * sum(k=0...105: f_k * 2^(-k))
where 's' is +1 or -1, 'e' is between 1022 and -968 inclusive, f_0 is
1, and f_k for k>0 is 0 or 1.  These are the 'normal' long doubles.

A long double can also represent any value of the form
  s * 2^-968 * sum(k=0...105: f_k * 2^(-k))
where 's' is +1 or -1, f_0 is 0, and f_k for k>0 is 0 or 1.  These are
the 'subnormal' long doubles.

There are four long doubles that represent zero, two that represent
+0.0 and two that represent -0.0.  The sign of the high part is the
sign of the long double, and the sign of the low part is ignored.

Likewise, there are four long doubles that represent infinities, two
for +Inf and two for -Inf.

Each NaN, quiet or signalling, that can be represented as a 'double'
can be represented as a 'long double'.  In fact, there are 2^64
equivalent representations for each one.

There are certain other valid long doubles where both parts are
nonzero but the low part represents a value which has a bit set below
2^(e-105).  These, together with the subnormal long doubles, make up
the denormal long doubles.

Many possible long double bit patterns are not valid long doubles.
These do not represent any value.

Limits
------

The maximum representable long double is 2^1024-2^918.  The smallest
*normal* positive long double is 2^-968.  The smallest denormalised
positive long double is 2^-1074 (this is the same as for 'double').

Conversions
-----------

A double can be converted to a long double by adding a zero low part.

A long double can be converted to a double by removing the low part.

Comparisons
-----------

Two long doubles can be compared by comparing the high parts, and if
those compare equal, comparing the low parts.

Arithmetic
----------

The unary negate operation operates by negating the low and high parts.

An absolute or absolute-negate operation must be done by comparing
against zero and negating if necessary.

Addition and subtraction are performed using library routines.  They
are not at present performed perfectly accurately, the result produced
will be within 1ulp of the range generated by adding or subtracting
1ulp from the input values, where a 'ulp' is 2^(e-106) given the
exponent 'e'.  In the presence of cancellation, this may be
arbitrarily inaccurate.  Subtraction is done by negation and addition.

Multiplication is also performed using a library routine.  Its result
will be within 2ulp of the correct result.

Division is also performed using a library routine.  Its result will
be within 3ulp of the correct result.


Copyright (C) 2004-2021 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
