mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-27 11:00:32 -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 | ||
|  | 
 | ||
|  | //]
 | ||
|  | 
 | ||
|  | */ | ||
|  | 
 |