Editing Long double

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 3: Line 3:
  
 
On many architectures, <code>long double</code> is identical to <code>double</code>, since <code>double</code> is usually a [[IEEE 754|binary64]] and many architectures do not support a longer floating-point data type. On Intel x86 machines, however, <code>long double</code> is often a 80-bit ''extended precision'' format that originated with the Intel 8087 numeric coprocessor. This format is almost exactly analogous to the [[IEEE 754]] formats, except that its significand does not carry an implicit leading 1. It consists of a sign bit, a 15-bit biased exponent field, and a 64-bit significand field. Because the x86 processors are little-endian, when this kind of number is stored in memory, the lowest-address 8 bytes are used for the significand, the next byte is used for the least significant 8 bits of the exponent, and the last byte contains the sign bit as the most significant bit, followed by the most significant 7 bits of the exponent.
 
On many architectures, <code>long double</code> is identical to <code>double</code>, since <code>double</code> is usually a [[IEEE 754|binary64]] and many architectures do not support a longer floating-point data type. On Intel x86 machines, however, <code>long double</code> is often a 80-bit ''extended precision'' format that originated with the Intel 8087 numeric coprocessor. This format is almost exactly analogous to the [[IEEE 754]] formats, except that its significand does not carry an implicit leading 1. It consists of a sign bit, a 15-bit biased exponent field, and a 64-bit significand field. Because the x86 processors are little-endian, when this kind of number is stored in memory, the lowest-address 8 bytes are used for the significand, the next byte is used for the least significant 8 bits of the exponent, and the last byte contains the sign bit as the most significant bit, followed by the most significant 7 bits of the exponent.
 
In Pascal, the corresponding data types are <code>Extended</code> (Free/Borland/GNU Pascal) and also <code>LongReal</code> (GNU Pascal), which also hold 80 bits of information.
 
 
==Properties==
 
The range of a <code>long double</code> can be checked in C using <code><float.h></code> and C++ using <code>std::numeric_limits</code>. This 80-bit format typically has a range of roughly 1.9E-4932 ... 1.1E+4932 and holds 19-20 significant digits.
 
 
Even though the <code>long double</code> may be stored using 96 or even 128 bits (you can check the number of bits using <code>8*sizeof(long double)</code>), it still only has 80 bits of precision. The extra padding bits are to help modern architectures align to 8 or 16 bit boundaries. In GCC, the compiler switches <code>-m96bit-long-double</code> and <code>-m128bit-long-double</code> may be used to control the storage size of a <code>long double</code>, without of course, changing its precision in any way.
 
 
==Usage==
 
To <code>scanf</code> or <code>printf</code> a <code>long double</code>, one should use the format specifier <code>%Lf</code> (<code>%llf</code> also works sometimes, although it is nonstandard).
 
 
A well-known bug on Windows is that MinGW uses the Microsoft C run-time libraries which do not have good support for the <code>long double</code> type. Attempts to print it will result in weird behaviour. As a workaround, a <code>long double</code> may be cast to <code>double</code> before being printed.
 

Please note that all contributions to PEGWiki are considered to be released under the Attribution 3.0 Unported (see PEGWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)