| Home | Libraries | People | FAQ | More

## Introduction

Boost.Math provides a collection of mathematical constants.

##### Why use Boost.Math mathematical constants?

- Readable. For the very many jobs just using built-in like `double`, you can just write expressions like

      double area = pi * r * r;

  (If that's all you want, jump direct to use in non-template code!)

- Effortless - avoiding a search of reference sources.
- Usable with both builtin floating point types, and user-defined, possibly extended precision, types such as NTL, MPFR/GMP, mp_float: in the latter case the constants are computed to the necessary precision and then cached.
- Accurate - ensuring that the values are as accurate as possible for the chosen floating-point type
  - No loss of accuracy from repeated rounding of intermediate computations.
  - Result is computed with higher precision and only rounded once.
  - Less risk of inaccurate result from functions pow, trig and log at corner cases.
  - Less risk of cancellation error.
- Portable - as possible between different systems using different floating-point precisions: see use in template code.
- Tested - by comparison with other published sources, or separately computed at long double precision.
- Faster - can avoid (re-)calculation at runtime.
  - If the value returned is a builtin type then it's returned by value as a `constexpr` (C++11 feature, if available).
  - If the value is computed and cached (or constructed from a string representation and cached), then it's returned by constant reference.
    This can be significant if:
  - Functions pow, trig or log are used.
  - Inside an inner loop.
  - Using a high-precision UDT like Boost.Multiprecision.
  - Compiler optimizations possible with built-in types, especially `double`, are not available.