mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05: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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 |