Next: Zero Length, Previous: Decimal Float, Up: C Extensions

### 5.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`

.