$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82899 - trunk/libs/math/example
From: pbristow_at_[hidden]
Date: 2013-02-15 05:49:15
Author: pbristow
Date: 2013-02-15 05:49:15 EST (Fri, 15 Feb 2013)
New Revision: 82899
URL: http://svn.boost.org/trac/boost/changeset/82899
Log:
use Kahan formula where max_digits10 not available.
Text files modified: 
   trunk/libs/math/example/constants_eg1.cpp |    18 ++++++++++++------                      
   1 files changed, 12 insertions(+), 6 deletions(-)
Modified: trunk/libs/math/example/constants_eg1.cpp
==============================================================================
--- trunk/libs/math/example/constants_eg1.cpp	(original)
+++ trunk/libs/math/example/constants_eg1.cpp	2013-02-15 05:49:15 EST (Fri, 15 Feb 2013)
@@ -1,4 +1,4 @@
-// Copyright Paul Bristow 2012.
+// Copyright Paul Bristow 2013.
 // Copyright John Maddock 2010.
 
 // Use, modification and distribution are subject to the
@@ -42,14 +42,20 @@
 
 int main()
 {
-  
+
   { // Boost.Math constants using function calls like pi().
     // using namespace boost::math::constants;
- 
+
    using boost::math::constants::pi;
    using boost::math::constants::one_div_two_pi;
 
-  cout.precision(numeric_limits<double>::max_digits10);
+#ifdef BOOST_NO_CXX11_NUMERIC_LIMITS
+     std::size_t max_digits10 = 2 + std::numeric_limits<double>::digits * 3010/10000;
+#else
+   std::size_t max_digits10 = std::numeric_limits<double>::max_digits10;
+#endif
+
+  std::cout.precision(max_digits10);
   cout << "double pi =  boost::math::double_constants::pi = " << pi<double>() << endl;
   //   double pi =  boost::math::double_constants::pi = 3.1415926535897931
   double r = 1.234567890123456789;
@@ -83,7 +89,7 @@
     double my2pi = two_pi; // Uses boost::math::double_constants::two_pi;
 
     cout << "double my2pi = " << my2pi << endl;
-    
+
     using boost::math::float_constants::e;
     float my_e = e;
     cout << "float my_e  " << my_e << endl;
@@ -138,7 +144,7 @@
     // For example, naively providing an @b integer instead of a floating-point type can be disastrous.
     // cout << "Area = " << area(2) << endl; // warning : 'return' : conversion from 'double' to 'int', possible loss of data
     // Failure to heed this warning can lead to very wrong answers!
-    //  Area = 12 !!  = 3 * 2 * 2 
+    //  Area = 12 !!  = 3 * 2 * 2
 //[math_constants_template_integer_type
     //cout << "Area = " << area(2) << endl; //   Area = 12!
     cout << "Area = " << area(2.) << endl;  //   Area = 12.566371