Floating point numbers are represented inside the computer in binary floating point. They are converted to decimal floating point when printed. The two formats are not the same, and some numbers are easily represented in decimal but not in binary (for example the number 1.1). The internal binary form for such numbers is an approximation, the closest that can be made given the number of bits available.
Normally, when a binary floating point number is printed, the shortest decimal number which would be represented by that binary number is used as the number to print, as it is a legitimate representation of the internal binary number. However, to see a more exact (extended form) representation of a binary floating point number, you can set the $floatshrinking debugger variable to 0 (zero).
The following example shows the result of converting 1.1 (shortened form) to the closest long double binary floating point number (extended form).
(idb) p $floatshrinking
1
(idb) p 1.1
1.1
(idb) set $floatshrinking = 0
(idb) p 1.1
1.10000000000000000000000000000000008
Currently, the extended forms are only available for long double variables and expressions.
For more detail on floating point representation, see ANSI IEEE standard 754-1985.
Floating point numbers occur in different lengths. Usual forms are 32, 64, and 128 bits.
On some platforms, an 80-bit length floating point may also occur. It is stored in a 128-bit register or memory area. Currently idb cannot distinguish between a true 128-bit number and an 80-bit number held in a 128-bit container.
If an 80-bit value is printed as though it were a 128-bit floating point number, the value is incorrect (typically, it will show up as a very small positive number). To correctly print the values of 80-bit floating point numbers, set the debugger variable $float80bit to a non-zero value. This will cause idb to treat all 128-bit floating point numbers as 80-bit numbers in 128-bit containers.