mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-25 01:50:30 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| // Use, modification and distribution are subject to 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)
 | |
| 
 | |
| // Copyright Paul A. Bristow 2012.
 | |
| // Copyright Christopher Kormanyos 2012.
 | |
| 
 | |
| // This file is written to be included from a Quickbook .qbk document.
 | |
| // It can be compiled by the C++ compiler, and run. Any output can
 | |
| // also be added here as comment or included or pasted in elsewhere.
 | |
| // Caution: this file contains Quickbook markup as well as code
 | |
| // and comments: don't change any of the special comment markups!
 | |
| 
 | |
| #ifdef _MSC_VER
 | |
| #  pragma warning (disable : 4512) // assignment operator could not be generated.
 | |
| #  pragma warning (disable : 4996)
 | |
| #endif
 | |
| 
 | |
| //[big_seventh_example_1
 | |
| 
 | |
| /*`[h5 Using Boost.Multiprecision `cpp_float` for numerical calculations with high precision.]
 | |
| 
 | |
| The Boost.Multiprecision library can be used for computations requiring precision
 | |
| exceeding that of standard built-in types such as float, double
 | |
| and long double. For extended-precision calculations, Boost.Multiprecision
 | |
| supplies a template data type called cpp_dec_float. The number of decimal
 | |
| digits of precision is fixed at compile-time via template parameter.
 | |
| 
 | |
| To use these floating-point types and constants, we need some includes:
 | |
| 
 | |
| */
 | |
| 
 | |
| #include <boost/math/constants/constants.hpp>
 | |
| 
 | |
| #include <boost/multiprecision/cpp_dec_float.hpp>
 | |
| // using boost::multiprecision::cpp_dec_float
 | |
| 
 | |
| #include <iostream>
 | |
| #include <limits>
 | |
| 
 | |
| //` So now we can demonstrate with some trivial calculations:
 | |
| 
 | |
| int main()
 | |
| {
 | |
| /*`Using `typedef cpp_dec_float_50` hides the complexity of multiprecision to allow us
 | |
|   to define variables with 50 decimal digit precision just like built-in `double`.
 | |
| */
 | |
|   using boost::multiprecision::cpp_dec_float_50;
 | |
| 
 | |
|   cpp_dec_float_50 seventh = cpp_dec_float_50(1) / 7;
 | |
| 
 | |
|   /*`By default, output would only show the standard 6 decimal digits,
 | |
|      so set precision to show all 50 significant digits.
 | |
|   */
 | |
|   std::cout.precision(std::numeric_limits<cpp_dec_float_50>::digits10);
 | |
|   std::cout << seventh << std::endl;
 | |
| /*`which outputs:
 | |
| 
 | |
|   0.14285714285714285714285714285714285714285714285714
 | |
| 
 | |
| We can also use constants, guaranteed to be initialized with the very last bit of precision.
 | |
| */
 | |
| 
 | |
|   cpp_dec_float_50 circumference = boost::math::constants::pi<cpp_dec_float_50>() * 2 * seventh;
 | |
| 
 | |
|   std::cout << circumference << std::endl;
 | |
| 
 | |
| /*`which outputs
 | |
| 
 | |
|     0.89759790102565521098932668093700082405633411410717
 | |
| */
 | |
| //]  [/big_seventh_example_1]
 | |
| 
 | |
|     return 0;
 | |
| } // int main()
 | |
| 
 | |
| 
 | |
| /*
 | |
| //[big_seventh_example_output
 | |
| 
 | |
|   0.14285714285714285714285714285714285714285714285714
 | |
|   0.89759790102565521098932668093700082405633411410717
 | |
| 
 | |
| //]
 | |
| 
 | |
| */
 | |
| 
 |