Some external libraries, typically those implemented in traditional languages, did not support extended precision.
Floating-point functions employed the floating-point accumulator (a two word area set aside by the floating-point library, three words for extended precision), and so on.
Additionally, the extended precision floating-point types permitted in 754 and present in many processors are not permitted in Java.
To mitigate such issues the internal registers in the 8087 were designed to hold intermediate results in an 80-bit "extended precision" format.
On the x86 design most C compilers now support 80-bit extended precision via the long double type, and this was specified in the C99 / C11 standards (IEC 60559 floating-point arithmetic (Annex F)).
Compilers on x86 for other languages often support extended precision as well, sometimes via nonstandard extensions: for example, Turbo Pascal offers an type, and several Fortran compilers have a type (analogous to and ).
The difficulty with the naive implementation is that x or y may over- or underflow, unless the intermediate result is computed with extended precision.
Also, half the significant digits carried will be lost unless the calculation is performed in extended precision.
The implementation of extended precision enabled standard elementary function libraries to be readily developed that normally gave double precision results within one unit in the last place (ULP) at high speed.
If, however, intermediate computations are all performed in extended precision (e.g. by setting line [1] to C99 long double), then up to full precision in the final double result can be maintained.