I stumbled upon http://sourceware.org/ml/glibc-cvs/2013-q1/msg00115.html, which includes the line
#define TWO5 0x1.0p5 /* 2^5 */
Apparently, TWO5 is defined as a double with the explicit value 1<<5
. However, this is the first time I see this notation. How has this format been in use, and what is the advantage over just writing 2.5
?
This notation was introduced in C99. The advantage is that the value is expressed in hexadecimal form, so it is not subject to rounding etc. that occurs when you convert a floating-point value between the underlying representation and a decimal form.
There are plenty of pages that describe this notation, for example:
http://www.exploringbinary.com/hexadecimal-floating-point-constants/