mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			232 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			232 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | 
 | ||
|  | 
 | ||
|  | [template policy_overview[] | ||
|  | 
 | ||
|  | Policies are a powerful fine-grain mechanism that allow you to customise the | ||
|  | behaviour of this library according to your needs.  There is more information | ||
|  | available in the [link math_toolkit.pol_tutorial policy tutorial] | ||
|  | and the [link math_toolkit.pol_ref policy reference]. | ||
|  | 
 | ||
|  | Generally speaking, unless you find that the | ||
|  | [link math_toolkit.pol_tutorial.policy_tut_defaults | ||
|  |  default policy behaviour] | ||
|  | when encountering 'bad' argument values does not meet your needs, | ||
|  | you should not need to worry about policies. | ||
|  | 
 | ||
|  | Policies are a compile-time mechanism that allow you to change | ||
|  | error-handling or calculation precision either | ||
|  | program wide, or at the call site. | ||
|  | 
 | ||
|  | Although the policy mechanism itself is rather complicated, | ||
|  | in practice it is easy to use, and very flexible. | ||
|  | 
 | ||
|  | Using policies you can control: | ||
|  | 
 | ||
|  | * [link math_toolkit.pol_ref.error_handling_policies How results from 'bad' arguments are handled], | ||
|  |    including those that cannot be fully evaluated. | ||
|  | * How [link math_toolkit.pol_ref.internal_promotion accuracy is controlled by internal promotion] to use more precise types. | ||
|  | * What working [link math_toolkit.pol_ref.precision_pol precision] should be used to calculate results. | ||
|  | * What to do when a [link math_toolkit.pol_ref.assert_undefined mathematically undefined function] | ||
|  |   is used:  Should this raise a run-time or compile-time error? | ||
|  | * Whether [link math_toolkit.pol_ref.discrete_quant_ref discrete functions], | ||
|  |   like the binomial, should return real or only integral values, and how they are rounded. | ||
|  | * How many iterations a special function is permitted to perform in | ||
|  |   a series evaluation or root finding algorithm before it gives up and raises an | ||
|  |   __evaluation_error. | ||
|  | 
 | ||
|  | You can control policies: | ||
|  | 
 | ||
|  | * Using [link math_toolkit.pol_ref.policy_defaults macros] to | ||
|  | change any default policy: the is the preferred method for installation | ||
|  | wide policies. | ||
|  | * At your chosen [link math_toolkit.pol_ref.namespace_pol | ||
|  | namespace scope] for distributions and/or functions: this is the | ||
|  | preferred method for project, namespace, or translation unit scope | ||
|  | policies. | ||
|  | * In an ad-hoc manner [link math_toolkit.pol_tutorial.ad_hoc_sf_policies | ||
|  | by passing a specific policy to a special function], or to a | ||
|  | [link math_toolkit.pol_tutorial.ad_hoc_dist_policies | ||
|  | statistical distribution]. | ||
|  | 
 | ||
|  | ] | ||
|  | 
 | ||
|  | [template performance_overview[] | ||
|  | 
 | ||
|  | By and large the performance of this library should be acceptable | ||
|  | for most needs.  However, often the library has to make a choice whether to | ||
|  | be accurate or fast and by default it chooses accuracy over speed.  If | ||
|  | you would rather have fast rather than fully accurate routines, then | ||
|  | refer to the [link perf performance section] for information and examples on how to | ||
|  | achieve this. | ||
|  | 
 | ||
|  | In terms of the algorithms used, this library aims to use the same "best | ||
|  | of breed" algorithms as many other libraries: the principle difference | ||
|  | is that this library is implemented in C++ - taking advantage of all | ||
|  | the abstraction mechanisms that C++ offers - where as most traditional | ||
|  | numeric libraries are implemented in C or FORTRAN.  Traditionally | ||
|  | languages such as C or FORTRAN are perceived as easier to optimise | ||
|  | than more complex languages like C++, so in a sense this library | ||
|  | provides a good test of current compiler technology, and the | ||
|  | "abstraction penalty" - if any - of C++ compared to other languages. | ||
|  | 
 | ||
|  | The three most important things you can do to ensure the best performance | ||
|  | from this library are: | ||
|  | 
 | ||
|  | # Turn on your compilers optimisations: the difference between "release" | ||
|  | and "debug" builds can easily be a [link math_toolkit.getting_best factor of 20]. | ||
|  | # Pick your compiler carefully: [link math_toolkit.comp_compilers | ||
|  | performance differences of up to | ||
|  | 8 fold] have been found between some Windows compilers for example. | ||
|  | # Disable internal use of `long double`, this will reduce accuracy but | ||
|  | typically yield a 2x speedup on modern x64 hardware/compilers. | ||
|  | 
 | ||
|  | The [link perf performance section] contains more | ||
|  | information on the performance | ||
|  | of this library, what you can do to fine tune it, and how this library | ||
|  | compares to some other open source alternatives. | ||
|  | 
 | ||
|  | ] | ||
|  | 
 | ||
|  | [template compilers_overview[] | ||
|  | 
 | ||
|  | This section contains some information about how various compilers | ||
|  | work with this library. | ||
|  | It is not comprehensive and updated experiences are always welcome. | ||
|  | Some effort has been made to suppress unhelpful warnings but it is | ||
|  | difficult to achieve this on all systems. | ||
|  | 
 | ||
|  | [table Supported/Tested Compilers | ||
|  | [[Platform][Compiler][Has long double support][Notes]] | ||
|  | [[Windows][MSVC 7.1 and later][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free at level 4 with | ||
|  |    this compiler.]] | ||
|  | [[Windows][Intel 8.1 and later][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free at level 4 with | ||
|  |    this compiler.  However, The tests cases tend to generate a lot of | ||
|  |       warnings relating to numeric underflow of the test data: these are | ||
|  |       harmless.]] | ||
|  | [[Windows][GNU Mingw32 C++][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free with -Wall with this compiler.]] | ||
|  | [[Windows][GNU Cygwin C++][No] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free with -Wall with this compiler. | ||
|  | 
 | ||
|  |    Long double support has been disabled because there are no native | ||
|  |    long double C std library functions available.]] | ||
|  | [[Windows][Borland C++ 5.8.2 (Developer studio 2006)][No] | ||
|  |    [We have only partial compatibility with this compiler: | ||
|  | 
 | ||
|  |    Long double support has been disabled because the native | ||
|  |    long double C standard library functions really only forward to the | ||
|  |    double versions.  This can result in unpredictable behaviour when | ||
|  |    using the long double overloads: for example `sqrtl` applied to a | ||
|  |    finite value, can result in an infinite result. | ||
|  | 
 | ||
|  |    Some functions still fail to compile, there are no known workarounds at present.]] | ||
|  | [[Windows 7/Netbeans 7.2][Clang 3.1][Yes][Spot examples OK. Expect all tests to compile and run OK.]] | ||
|  | 
 | ||
|  | [[Linux][GNU C++ 3.4 and later][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free with -Wall with this compiler.]] | ||
|  | [[Linux][Clang 3.2][Yes][All tests OK.]] | ||
|  | [[Linux][Intel C++ 10.0 and later][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free with -Wall with this compiler. | ||
|  |    However, The tests cases tend to generate a lot of | ||
|  |    warnings relating to numeric underflow of the test data: these are | ||
|  |    harmless.]] | ||
|  | [[Linux][Intel C++ 8.1 and 9.1][No] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    Long double support has been disabled with these compiler releases | ||
|  |    because calling the standard library long double math functions | ||
|  |    can result in a segfault.  The issue is Linux distribution and | ||
|  |    glibc version specific and is Intel bug report #409291.  Fully up to date | ||
|  |    releases of Intel 9.1 (post version l_cc_c_9.1.046) | ||
|  |    shouldn't have this problem.  If you need long | ||
|  |    double support with this compiler, then comment out the define of | ||
|  |    BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS at line 55 of | ||
|  |    [@../../../../boost/math/tools/config.hpp boost/math/tools/config.hpp]. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free with -Wall with this compiler. | ||
|  |    However, The tests cases tend to generate a lot of | ||
|  |    warnings relating to numeric underflow of the test data: these are | ||
|  |    harmless.]] | ||
|  | [[Linux][QLogic PathScale 3.0][Yes] | ||
|  |    [Some tests involving conceptual checks fail to build, otherwise | ||
|  |    there appear to be no issues.]] | ||
|  | [[Linux][Sun Studio 12][Yes] | ||
|  |    [Some tests involving function overload resolution fail to build, | ||
|  |    these issues should be rarely encountered in practice.]] | ||
|  | [[Solaris][Sun Studio 12][Yes] | ||
|  |    [Some tests involving function overload resolution fail to build, | ||
|  |    these issues should be rarely encountered in practice.]] | ||
|  | [[Solaris][GNU C++ 4.x][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    We aim to keep our headers warning free with -Wall with this compiler.]] | ||
|  | [[HP Tru64][Compaq C++ 7.1][Yes] | ||
|  |    [All tests OK.]] | ||
|  | [[HP-UX Itanium][HP aCC 6.x][Yes] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    Unfortunately this compiler emits quite a few warnings from libraries | ||
|  |    upon which we depend (TR1, Array etc).]] | ||
|  | [[HP-UX PA-RISC][GNU C++ 3.4][No] | ||
|  |    [All tests OK.]] | ||
|  | [[Apple Mac OS X, Intel][Darwin/GNU C++ 4.x][Yes][All tests OK.]] | ||
|  | [[Apple Mac OS X, PowerPC][Darwin/GNU C++ 4.x][No] | ||
|  |    [All tests OK. | ||
|  | 
 | ||
|  |    Long double support has been disabled on this platform due to the | ||
|  |    rather strange nature of Darwin's 106-bit long double | ||
|  |    implementation.  It should be possible to make this work if someone | ||
|  |    is prepared to offer assistance.]] | ||
|  | [[Apple Mac OS X,][Clang 3.2][Yes][All tests expected to be OK.]] | ||
|  | [[IBM AIX][IBM xlc 5.3][Yes] | ||
|  |    [All tests pass except for our fpclassify tests which fail due to a | ||
|  |    bug in `std::numeric_limits`, the bug effects the test code, not | ||
|  |    fpclassify itself.  The IBM compiler group are aware of the problem.]] | ||
|  | ] | ||
|  | 
 | ||
|  | [table Unsupported Compilers | ||
|  | [[Platform][Compiler]] | ||
|  | [[Windows][Borland C++ 5.9.2 (Borland Developer Studio 2007)]] | ||
|  | [[Windows][MSVC 6 and 7]] | ||
|  | ] | ||
|  | 
 | ||
|  | If your compiler or platform is not listed above, please try running the | ||
|  | regression tests: cd into boost-root/libs/math/test and do a: | ||
|  | 
 | ||
|  |    bjam mytoolset | ||
|  | 
 | ||
|  | where "mytoolset" is the name of the | ||
|  | [@http://www.boost.org/doc/html/bbv2.html Boost.Build] | ||
|  | toolset used for your | ||
|  | compiler.  The chances are that [*many of the accuracy tests will fail | ||
|  | at this stage] - don't panic - the default acceptable error tolerances | ||
|  | are quite tight, especially for long double types with an extended | ||
|  | exponent range (these cause more extreme test cases to be executed | ||
|  | for some functions). | ||
|  | You will need to cast an eye over the output from | ||
|  | the failing tests and make a judgement as to whether | ||
|  | the error rates are acceptable or not. | ||
|  | ] | ||
|  | 
 | ||
|  | [/ common_overviews.qbk | ||
|  |   Copyright 2007, 2012, 2014 John Maddock 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). | ||
|  | ] | ||
|  | 
 |