Squashed 'third_party/boostorg/math/' content from commit 0e9549f

Change-Id: I7c2a13cb6a5beea4a471341510d8364cedd71613
git-subtree-dir: third_party/boostorg/math
git-subtree-split: 0e9549ff2f854e6edafaf4627d65026f2f533a18
diff --git a/doc/constants/pp_pi.hpp b/doc/constants/pp_pi.hpp
new file mode 100644
index 0000000..db66d30
--- /dev/null
+++ b/doc/constants/pp_pi.hpp
@@ -0,0 +1,99 @@
+//[preprocessed_pi
+
+// Preprocessed pi constant, annotated.
+
+namespace boost
+{
+  namespace math
+  {
+    namespace constants
+    {
+      namespace detail
+      {
+        template <class T> struct constant_pi
+        {
+          private:
+            // Default implementations from string of decimal digits:
+            static inline T get_from_string()
+            {
+            static const T result
+               = detail::convert_from_string<T>("3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00",
+               boost::is_convertible<const char*, T>());
+              return result;
+            }
+            template <int N> static T compute();
+
+          public:
+            // Default implementations from string of decimal digits:
+            static inline T get(const mpl::int_<construct_from_string>&)
+            {
+              constant_initializer<T, & constant_pi<T>::get_from_string >::do_nothing();
+              return get_from_string();
+            }
+            // Float, double and long double versions:
+            static inline T get(const mpl::int_<construct_from_float>)
+            {
+              return 3.141592653589793238462643383279502884e+00F;
+            }
+            static inline  T get(const mpl::int_<construct_from_double>&)
+            {
+              return 3.141592653589793238462643383279502884e+00;
+            }
+            static inline  T get(const mpl::int_<construct_from_long_double>&)
+            {
+              return 3.141592653589793238462643383279502884e+00L;
+            }
+            // For very high precision that is nonetheless can be calculated at compile time:
+            template <int N> static inline T get(const mpl::int_<N>& n)
+            {
+              constant_initializer2<T, N, & constant_pi<T>::template compute<N> >::do_nothing();
+              return compute<N>();
+            }
+            //For true arbitrary precision, which may well vary at runtime.
+            static inline T get(const mpl::int_<0>&)
+            {
+              return tools::digits<T>() > max_string_digits ? compute<0>() : get(mpl::int_<construct_from_string>());
+            }
+         }; // template <class T> struct constant_pi
+      } //  namespace detail
+
+      // The actual forwarding function (including policy to control precision).
+      template <class T, class Policy> inline T pi( )
+      {
+        return detail:: constant_pi<T>::get(typename construction_traits<T, Policy>::type());
+      }
+      // The actual forwarding function (using default policy to control precision).
+      template <class T> inline  T pi()
+      {
+        return pi<T, boost::math::policies::policy<> >()
+      }
+    } //     namespace constants
+
+    // Namespace specific versions, for the three built-in floats:
+    namespace float_constants
+    {
+      static const float pi = 3.141592653589793238462643383279502884e+00F;
+    }
+    namespace double_constants
+    {
+      static const double pi = 3.141592653589793238462643383279502884e+00;
+    }
+    namespace long_double_constants
+    {
+      static const long double pi = 3.141592653589793238462643383279502884e+00L;
+    }
+    namespace constants{;
+    } // namespace constants
+  } // namespace math
+} // namespace boost
+
+//] [/preprocessed_pi]
+
+/*
+  Copyright 2012 John Maddock and Paul A. Bristow.
+  Distributed under the Boost Software License, Version 1.0.
+  (See accompanying file LICENSE_1_0.txt or copy at
+  http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+