### 19.1 Predefined Mathematical Constants ¶

The header `math.h` defines several useful mathematical constants.
All values are defined as preprocessor macros starting with `M_`

.
The values provided are:

`M_E`

¶
The base of natural logarithms.

`M_LOG2E`

¶
The logarithm to base `2`

of `M_E`

.

`M_LOG10E`

¶
The logarithm to base `10`

of `M_E`

.

`M_LN2`

¶
The natural logarithm of `2`

.

`M_LN10`

¶
The natural logarithm of `10`

.

`M_PI`

¶
Pi, the ratio of a circle’s circumference to its diameter.

`M_PI_2`

¶
Pi divided by two.

`M_PI_4`

¶
Pi divided by four.

`M_1_PI`

¶
The reciprocal of pi (1/pi)

`M_2_PI`

¶
Two times the reciprocal of pi.

`M_2_SQRTPI`

¶
Two times the reciprocal of the square root of pi.

`M_SQRT2`

¶
The square root of two.

`M_SQRT1_2`

¶
The reciprocal of the square root of two (also the square root of 1/2).

These constants come from the Unix98 standard and were also available in
4.4BSD; therefore they are only defined if
`_XOPEN_SOURCE=500`

, or a more general feature select macro, is
defined. The default set of features includes these constants.
See Feature Test Macros.

All values are of type `double`

. As an extension, the GNU C Library
also defines these constants with type `long double`

and
`float`

. The `long double`

macros have a lowercase ‘`l`’
while the `float`

macros have a lowercase ‘`f`’ appended to
their names: `M_El`

, `M_PIl`

, and so forth. These are only
available if `_GNU_SOURCE`

is defined.

Likewise, the GNU C Library also defines these constants with the types
`_Float``N`

and `_Float``N`x

for the machines that
have support for such types enabled (see Mathematics) and if
`_GNU_SOURCE`

is defined. When available, the macros names are
appended with ‘`f``N`’ or ‘`f``N`x’, such as ‘`f128`’
for the type `_Float128`

.

*Note:* Some programs use a constant named `PI`

which has the
same value as `M_PI`

. This constant is not standard; it may have
appeared in some old AT&T headers, and is mentioned in Stroustrup’s book
on C++. It infringes on the user’s name space, so the GNU C Library
does not define it. Fixing programs written to expect it is simple:
replace `PI`

with `M_PI`

throughout, or put ‘`-DPI=M_PI`’
on the compiler command line.