mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								[section:fpclass Floating-Point Classification: Infinities and NaNs]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h4 Synopsis]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   #define FP_ZERO        /* implementation specific value */
							 | 
						||
| 
								 | 
							
								   #define FP_NORMAL      /* implementation specific value */
							 | 
						||
| 
								 | 
							
								   #define FP_INFINITE    /* implementation specific value */
							 | 
						||
| 
								 | 
							
								   #define FP_NAN         /* implementation specific value */
							 | 
						||
| 
								 | 
							
								   #define FP_SUBNORMAL   /* implementation specific value */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   int fpclassify(T t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isfinite(T z); // Neither infinity nor NaN.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isinf(T t); // Infinity (+ or -).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isnan(T t); // NaN.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isnormal(T t); // isfinite and not denormalised.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   #include <boost\math\special_functions\fpclassify.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								to use these functions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h4 Description]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								These functions provide the same functionality as the macros with the same
							 | 
						||
| 
								 | 
							
								name in C99, indeed if the C99 macros are available, then these functions
							 | 
						||
| 
								 | 
							
								are implemented in terms of them, otherwise they rely on `std::numeric_limits<>`
							 | 
						||
| 
								 | 
							
								to function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Note that the definition of these functions
							 | 
						||
| 
								 | 
							
								['does not suppress the definition of these names as macros by math.h]
							 | 
						||
| 
								 | 
							
								on those platforms that already provide
							 | 
						||
| 
								 | 
							
								these as macros. That mean that the following have differing meanings:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   using namespace boost::math;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   // This might call a global macro if defined,
							 | 
						||
| 
								 | 
							
								   // but might not work if the type of z is unsupported
							 | 
						||
| 
								 | 
							
								   // by the std lib macro:
							 | 
						||
| 
								 | 
							
								   isnan(z);
							 | 
						||
| 
								 | 
							
								   //
							 | 
						||
| 
								 | 
							
								   // This calls the Boost version
							 | 
						||
| 
								 | 
							
								   // (found via the "using namespace boost::math" declaration)
							 | 
						||
| 
								 | 
							
								   // it works for any type that has numeric_limits support for type z:
							 | 
						||
| 
								 | 
							
								   (isnan)(z);
							 | 
						||
| 
								 | 
							
								   //
							 | 
						||
| 
								 | 
							
								   // As above but with explicit namespace qualification.
							 | 
						||
| 
								 | 
							
								   (boost::math::isnan)(z);
							 | 
						||
| 
								 | 
							
								   //
							 | 
						||
| 
								 | 
							
								   // This will cause a compiler error if isnan is a native macro:
							 | 
						||
| 
								 | 
							
								   boost::math::isnan(z);
							 | 
						||
| 
								 | 
							
								   // So always use instead:
							 | 
						||
| 
								 | 
							
								   (boost::math::isnan)(z);
							 | 
						||
| 
								 | 
							
								   //
							 | 
						||
| 
								 | 
							
								   // You can also add a using statement,
							 | 
						||
| 
								 | 
							
								   // globally to a .cpp file, or to a local function in a .hpp file.
							 | 
						||
| 
								 | 
							
								   using boost::math::isnan;
							 | 
						||
| 
								 | 
							
								   // so you can write the shorter and less cluttered
							 | 
						||
| 
								 | 
							
								   (isnan)(z)
							 | 
						||
| 
								 | 
							
								   // But, as above, if isnan is a native macro, this causes a compiler error,
							 | 
						||
| 
								 | 
							
								   // because the macro always 'gets' the name first, unless enclosed in () brackets.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Detailed descriptions for each of these functions follows:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   int fpclassify(T t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns an integer value that classifies the value /t/:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[table
							 | 
						||
| 
								 | 
							
								[[fpclassify value] [class of t.]]
							 | 
						||
| 
								 | 
							
								[[FP_ZERO] [If /t/ is zero.]]
							 | 
						||
| 
								 | 
							
								[[FP_NORMAL] [If /t/ is a non-zero, non-denormalised finite value.]]
							 | 
						||
| 
								 | 
							
								[[FP_INFINITE] [If /t/ is plus or minus infinity.]]
							 | 
						||
| 
								 | 
							
								[[FP_NAN] [If /t/ is a NaN.]]
							 | 
						||
| 
								 | 
							
								[[FP_SUBNORMAL] [If /t/ is a denormalised number.]]
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isfinite(T z);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns true only if /z/ is not an infinity or a NaN.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isinf(T t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns true only if /z/ is plus or minus infinity.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isnan(T t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns true only if /z/ is a [@http://en.wikipedia.org/wiki/NaN NaN].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T>
							 | 
						||
| 
								 | 
							
								   bool isnormal(T t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns true only if /z/ is a normal number (not zero, infinite, NaN, or denormalised).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h5 Floating-point format]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you wish to find details of the floating-point format for any particular processor,
							 | 
						||
| 
								 | 
							
								there is a program
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[@../../example/inspect_fp.cpp inspect_fp.cpp]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								by Johan Rade which can be used to print out the processor type,
							 | 
						||
| 
								 | 
							
								endianness, and detailed bit layout of a selection of floating-point values,
							 | 
						||
| 
								 | 
							
								including infinity and NaNs.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect] [/section:fpclass Floating Point Classification: Infinities and NaNs]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[/
							 | 
						||
| 
								 | 
							
								  Copyright 2006, 2008, 2011 John Maddock, Johan Rade and Paul A. Bristow.
							 | 
						||
| 
								 | 
							
								  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).
							 | 
						||
| 
								 | 
							
								]
							 |