6.11. Hex Floats
ISO C99 supports floating-point numbers written not only in the usual
decimal notation, such as 1.55e1, but also numbers such as
0x1.fp3 written in hexadecimal format. As a GNU extension, GCC
supports this in C89 mode (except in some cases when strictly
conforming) and in C++. In that format the
0x hex introducer and the p or P exponent field are
mandatory. The exponent is a decimal number that indicates the power of
2 by which the significant part will be multiplied. Thus 0x1.f is
1 15/16,
p3 multiplies it by 8, and the value of 0x1.fp3
is the same as 1.55e1.
Unlike for floating-point numbers in the decimal notation the exponent
is always required in the hexadecimal notation. Otherwise the compiler
would not be able to resolve the ambiguity of, e.g., 0x1.f. This
could mean 1.0f or 1.9375 since f is also the
extension for floating-point constants of type float.