mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	
		
			
	
	
		
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								[/
							 | 
						||
| 
								 | 
							
								    Boost.Optional
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    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)
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[section bounds<> traits class]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[section Introduction]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To determine the ranges of numeric types with `std::numeric_limits` \[18.2.1\],
							 | 
						||
| 
								 | 
							
								different syntax have to be used depending on numeric type. Specifically,
							 | 
						||
| 
								 | 
							
								`numeric_limits<T>::min()` for integral types returns the minimum finite value,
							 | 
						||
| 
								 | 
							
								whereas for floating point types it returns the minimum positive normalized
							 | 
						||
| 
								 | 
							
								value. The difference in semantics makes client code unnecessarily complex
							 | 
						||
| 
								 | 
							
								and error prone.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`boost::numeric::bounds<>` provides a consistent interface for retrieving the
							 | 
						||
| 
								 | 
							
								maximum finite value, the minimum finite value and the minimum positive normalized
							 | 
						||
| 
								 | 
							
								value (0 for integral types) for numeric types. The selection of implementation
							 | 
						||
| 
								 | 
							
								is performed at compile time, so there is no runtime overhead.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[section traits class bounds<N>]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<class N>
							 | 
						||
| 
								 | 
							
								    struct bounds
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        static N lowest  () { return implementation_defined; }
							 | 
						||
| 
								 | 
							
								        static N highest () { return implementation_defined; }
							 | 
						||
| 
								 | 
							
								        static N smallest() { return implementation_defined; }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[heading Members]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[: `lowest()` ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns the minimum finite value, equivalent to `numeric_limits<T>::min()` when `T`
							 | 
						||
| 
								 | 
							
								is an integral type, and to `-numeric_limits<T>::max()` when `T` is a floating point type.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[: `highest()` ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns the maximum finite value, equivalent to `numeric_limits<T>::max()`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[: `smallest()` ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns the smallest positive normalized value for floating point types with
							 | 
						||
| 
								 | 
							
								denormalization, or returns 0 for integral types.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[section Examples]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The following example demonstrates the use of `numeric::bounds<>` and the
							 | 
						||
| 
								 | 
							
								equivalent code using `numeric_limits`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #include <iostream>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #include <boost/numeric/conversion/bounds.hpp>
							 | 
						||
| 
								 | 
							
								    #include <boost/limits.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int main() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        std::cout << "numeric::bounds versus numeric_limits example.\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        std::cout << "The maximum value for float:\n";
							 | 
						||
| 
								 | 
							
								        std::cout << boost::numeric::bounds<float>::highest() << "\n";
							 | 
						||
| 
								 | 
							
								        std::cout << std::numeric_limits<float>::max() << "\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        std::cout << "The minimum value for float:\n";
							 | 
						||
| 
								 | 
							
								        std::cout << boost::numeric::bounds<float>::lowest() << "\n";
							 | 
						||
| 
								 | 
							
								        std::cout << -std::numeric_limits<float>::max() << "\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        std::cout << "The smallest positive value for float:\n";
							 | 
						||
| 
								 | 
							
								        std::cout << boost::numeric::bounds<float>::smallest() << "\n";
							 | 
						||
| 
								 | 
							
								        std::cout << std::numeric_limits<float>::min() << "\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |