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 _FloatN and _FloatNx 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 ‘fN’ or ‘fNx’, 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.