diff --git a/doc/html/backgrounders.html b/doc/html/backgrounders.html index 01a8d8ec4..964e00b12 100644 --- a/doc/html/backgrounders.html +++ b/doc/html/backgrounders.html @@ -3,7 +3,7 @@
Table of Contents
-Table of Contents
-Table of Contents
-Table of Contents
-Table of Contents
-Table of Contents
-Last revised: September 02, 2018 at 07:28:45 GMT
Last revised: October 04, 2018 at 13:21:42 GMT
Table of Contents
-1 2 4 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
branch
+ +brent_find_minima
ln
- -location
more
- -msg
prime
required
- -riemann_zeta
A B C D E F G H I L M N O P Q R S T U W
A B C D E F G H I L N O P R S T U V W
1 2 4 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
branch
+ +brent_find_minima
ln
- -Locating Function Minima using Brent's algorithm
more
- -More complex example - Inverting the Elliptic Integrals
prime
required
- -Riemann Zeta Function
Setting the Maximum Interval Halvings and Memory Requirements
- +set_zero
@@ -7580,10 +7553,7 @@Using Boost.Multiprecision
- +Using C++11 Lambda's
diff --git a/doc/html/internals.html b/doc/html/internals.html index a6b546e55..4edf71e87 100644 --- a/doc/html/internals.html +++ b/doc/html/internals.html @@ -3,7 +3,7 @@Table of Contents
-Table of Contents
-Table of Contents
-- +
Then almost any root-finding algorithm will descend into a local minima rather @@ -55,7 +55,7 @@ is essentially zero:
- +
In this situation the next iteration will shoot off to infinity (assuming we're @@ -75,7 +75,7 @@ this case:
- +
An initial Newton step would take you further from the root than you started, @@ -90,7 +90,7 @@ Consider starting at z0 in this situation:
- +
The first derivative is essentially infinite, and the second close to zero diff --git a/doc/html/math_toolkit/barycentric.html b/doc/html/math_toolkit/barycentric.html index 37c3aadc6..d0cab596c 100644 --- a/doc/html/math_toolkit/barycentric.html +++ b/doc/html/math_toolkit/barycentric.html @@ -3,7 +3,7 @@
double x = 2.3; double y = interpolant(x);+
+ and to evaluate its derivative use +
+double y = interpolant.prime(x); +
Although this algorithm is robust, it can surprise you. The main way this occurs is if the sample spacing at the endpoints is much larger than the spacing in @@ -87,7 +94,9 @@
The reference used for implementation of this algorithm is Barycentric - rational interpolation with no poles and a high rate of interpolation. + rational interpolation with no poles and a high rate of interpolation, + and the evaluation of the derivative is given by Some + New Aspects of Rational Interpolation.
This documentation aims to use of the following naming and formatting conventions. diff --git a/doc/html/math_toolkit/create.html b/doc/html/math_toolkit/create.html index dd6b33e00..c8d61dcba 100644 --- a/doc/html/math_toolkit/create.html +++ b/doc/html/math_toolkit/create.html @@ -3,7 +3,7 @@
- Π(n, φ+mπ, k) = Π(n, φ, k) ; n > 1 [1] + Π(n, φ+mπ, k) = Π(n, φ, k) ; n > 1 [1]
are used to move φ to the range [0, π/2].
@@ -324,7 +324,7 @@
[1] I haven't been able to find a literature reference for this relation, but it appears to be the convention used by Mathematica. Intuitively the first diff --git a/doc/html/math_toolkit/ellint/ellint_carlson.html b/doc/html/math_toolkit/ellint/ellint_carlson.html index a97718e47..6d2adee3f 100644 --- a/doc/html/math_toolkit/ellint/ellint_carlson.html +++ b/doc/html/math_toolkit/ellint/ellint_carlson.html @@ -3,7 +3,7 @@
[5] W. J. Cody and H. C. Thacher, Jr., Rational Chebyshev approximations for the exponential integral E1(x), Math. Comp. 22 (1968), 641-649, and W. diff --git a/doc/html/math_toolkit/expint/expint_n.html b/doc/html/math_toolkit/expint/expint_n.html index 41f945e2f..3a8bedc20 100644 --- a/doc/html/math_toolkit/expint/expint_n.html +++ b/doc/html/math_toolkit/expint/expint_n.html @@ -3,7 +3,7 @@
These functions each take two arguments: a parameter, and a variable as described @@ -88,7 +88,7 @@ to use jacobi_elliptic.
[2] Wikipedia: Jacobi elliptic functions diff --git a/doc/html/math_toolkit/jacobi/jacobi_cd.html b/doc/html/math_toolkit/jacobi/jacobi_cd.html index 37fea1f40..028ec60b4 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_cd.html +++ b/doc/html/math_toolkit/jacobi/jacobi_cd.html @@ -3,7 +3,7 @@
lambert_w0
and lambert_wm1, and their
- 1st derivative, are provided by Boost's real-only implementation.
+ 1st derivatives, lambert_w0_prime
+ and lambert_wm1_prime are provided
+ by Boost's real-only implementation.
In the graphs below, the red line is the W0 branch, and the blue line the W-1
@@ -95,8 +97,11 @@
the first z argument.
- For C++ types float the maximum
- z argument (std::numeric_limits<>::max)() Lambert_w0(3.2e+38) = 84.29, and for double, lambert_w0(1.797e+308) = 703.3.
+ For C++ fundamental
+ (built-in) types, the maximum z argument (std::numeric_limits<T>::max)() for
+ float is Lambert_w0(3.2e+38) =
+ 84.29, and for double is lambert_w0(1.797e+308)
+ = 703.3.
The final Policy argument is optional and can @@ -149,7 +154,7 @@
Other floating-point types can be used too, here float,
- including user defined types like Boost.Multiprecision.
+ including user-defined types like Boost.Multiprecision.
It is convenient to use a function like show_value
to display all (and only) potentially significant decimal digits, including
any significant trailing zeros, (std::numeric_limits<T>::max_digits10) for the type T.
@@ -314,7 +319,7 @@
Argument z = 1 is out of range (z <= 0) for Lambert W-1 branch! (Try Lambert W0 branch?)
- Show error reporting if a value is passed to lambert_w0
+ Showing an error reported if a value is passed to lambert_w0
that is out of range, (and was probably meant to be passed to lambert_wm1 instead).
double z = +1.; @@ -371,7 +376,7 @@ std::cout << "voltage = " << v << ", current = " << icalc << ", " << log(icalc) << std::endl; // voltage = 0.9, current = 0.00108485, -6.82631
- the formula can be rendered in C++ + the formulas can be rendered in C++
double iv(double v, double vt, double rsat, double re, double isat, double nu = 1.) { @@ -405,8 +410,9 @@The plotted points for no external series resistance (derived from their published plot as the raw data are not publicly available) are used to extrapolate back - to estimate the intrinsic emitter resistance as 0.3 ohm. Its effect is visible - when the straight line from low voltages starts to curve. + to estimate the intrinsic emitter resistance as 0.3 ohm. The effect of external + series resistance is visible when the colored lines start to curve away from + the straight line as voltage increases.
See lambert_w_diode.cpp @@ -453,7 +459,7 @@
This implementation provides good precision and excellent speed for __fundamental - types
floatanddouble. +floatanddouble.All the functions usually return values within a few Unit @@ -464,7 +470,7 @@
By default, this implementation provides the best possible speed. Very slightly average higher precision and less bias might be obtained by adding a Halley step refinement, but - at the cost of more than doubling the run time. + at the cost of more than doubling the runtime.
@@ -486,7 +492,7 @@ from a higher precision type, typically a Boost.Multiprecision type like
cpp_bin_float_50, but at the cost of increasing run-time >100-fold; this has been used here - to provide our reference values for testing. + to provide some of our reference values for testing.For example, we get a reference value using a high precision type, for example; @@ -649,7 +655,7 @@
As noted in the implementation section, the distribution of these differences is somewhat biased for Lambert W-1 and this might be reduced using a
doubleHalley step at small runtime cost. But - if you are serisouly concerned to get really precise computations, the only + if you are seriously concerned to get really precise computations, the only way is using a higher precision type and then reduce to the desired type. Fortunately, Boost.Multiprecision makes this very easy to program, if much slower. @@ -755,9 +761,16 @@ Compilers- The code has been tested on VS 15.7.5, Clang 6.0.0 and GCC 8.1.0; it is expected - to work on all C++ compilers. As expected, debug mode is very much slower. - The release version optimisation also varied. + The code has been tested on VS 15.8.5, Clang 7.0.0 and GCC 8.1.0; it is expected + to work on all C++11 compilers. For details of which compilers are expected + to work see lambert_w tests and examples in:
+
Boost + Test Summary report for master branch (used for latest release)
+ Boost + Test Summary report for latest developer branch. ++ As expected, debug mode is very much slower. The release version optimisation + also varied.
@@ -824,7 +837,7 @@ desired result type. This strategy is used by Maple and WolframAlpha, for example, using arbitrary precision arithmetic, and some of their high-precision values are used for testing this library. This method - is also used to provide Boost.Test + is also used to provide some Boost.Test values using Boost.Multiprecision, typically, a 50 decimal digit type like
cpp_bin_float_50static_castto afloat,double@@ -845,8 +858,8 @@ is not justified and the algorithms here do not implement this. But because the Boost.Lambert_W algorithms has been tested using Boost.Multiprecision, users who require this can always easily achieve the nearest representation - for the fundamental_types - if the application justifies the very large extra - computation cost. + for __fundamental - if the application justifies the very large extra computation + cost.@@ -1115,7 +1128,7 @@ if (f(w) / f'(w
- With the rational polynomial approximation method, there are a third one bit
- from the best and none more than two bits. Adding a Halley step (or iteration)
- reduces the number that are one bit different from about a third down to one
+ With the rational polynomial approximation method, there are a third one-bit
+ from the best and none more than two-bits. Adding a Halley step (or iteration)
+ reduces the number that are one-bit different from about a third down to one
in 30; this is unavoidable 'computational noise'. An extra Halley step would
double the runtime for a tiny gain and so is not chosen for this implementation,
but remains a option, as detailed above.
@@ -1407,10 +1420,10 @@ if (f(w) / f'(w
The arrays are as const and constexpr and static
as possible (for the compiler version), using BOOST_STATIC_CONSTEXPR macro.
- (See lambert_w_lookup_table_generator.cpp
+ (See lambert_w_lookup_table_generator.cpp
The precision was chosen to ensure that if used as long
double arrays, then the values output
- to lambert_w_lookup_table.ipp
+ to lambert_w_lookup_table.ipp
will be the nearest representable value for the type chose by a typedef in lambert_w.hpp.
typedef double lookup_t; // Type for lookup table (`double` or `float`, or even `long double`?) @@ -1777,9 +1790,10 @@ if (f(w) / f'(wA further method of testing over a wide range of argument z values was devised - by Nick Thompson (cunningly also to test the recently written quadrature routines!). - These are definite integral formulas involving the W function that are exactly - known constants, for example, LambertW0(1/(z²) == √(2π), see Definite + by Nick Thompson (cunningly also to test the recently written quadrature routines + including Boost.Multiprecision + !). These are definite integral formulas involving the W function that are + exactly known constants, for example, LambertW0(1/(z²) == √(2π), see Definite Integrals. Some care was needed to avoid overflow and underflow as the integral function must evaluate to a finite result over the entire range.
diff --git a/doc/html/math_toolkit/lanczos.html b/doc/html/math_toolkit/lanczos.html index 8b3341399..00a190abc 100644 --- a/doc/html/math_toolkit/lanczos.html +++ b/doc/html/math_toolkit/lanczos.html @@ -3,7 +3,7 @@The Lanczos Approximation - + diff --git a/doc/html/math_toolkit/logs_and_tables.html b/doc/html/math_toolkit/logs_and_tables.html index 269531958..b9ff2085a 100644 --- a/doc/html/math_toolkit/logs_and_tables.html +++ b/doc/html/math_toolkit/logs_and_tables.html @@ -3,7 +3,7 @@Error logs and tables - + @@ -26,7 +26,7 @@ -+
- Tables of Error Rates for all Functions
- Error Logs For Error diff --git a/doc/html/math_toolkit/logs_and_tables/all_table.html b/doc/html/math_toolkit/logs_and_tables/all_table.html index ffc942977..db02b38c6 100644 --- a/doc/html/math_toolkit/logs_and_tables/all_table.html +++ b/doc/html/math_toolkit/logs_and_tables/all_table.html @@ -3,7 +3,7 @@
Tables of Error Rates for all Functions - + diff --git a/doc/html/math_toolkit/logs_and_tables/logs.html b/doc/html/math_toolkit/logs_and_tables/logs.html index f598fc3af..353abcdf1 100644 --- a/doc/html/math_toolkit/logs_and_tables/logs.html +++ b/doc/html/math_toolkit/logs_and_tables/logs.html @@ -3,7 +3,7 @@Error Logs For Error Rate Tables - + diff --git a/doc/html/math_toolkit/macros.html b/doc/html/math_toolkit/macros.html index 2e4590817..bf68fd68c 100644 --- a/doc/html/math_toolkit/macros.html +++ b/doc/html/math_toolkit/macros.html @@ -3,7 +3,7 @@Floating-Point Constant Macros - + diff --git a/doc/html/math_toolkit/main_faq.html b/doc/html/math_toolkit/main_faq.html index 3ad6901ac..defc118a0 100644 --- a/doc/html/math_toolkit/main_faq.html +++ b/doc/html/math_toolkit/main_faq.html @@ -3,7 +3,7 @@Frequently Asked Questions FAQ - + diff --git a/doc/html/math_toolkit/main_intro.html b/doc/html/math_toolkit/main_intro.html index 52184b773..b3d11120c 100644 --- a/doc/html/math_toolkit/main_intro.html +++ b/doc/html/math_toolkit/main_intro.html @@ -3,7 +3,7 @@About the Math Toolkit - + diff --git a/doc/html/math_toolkit/main_tr1.html b/doc/html/math_toolkit/main_tr1.html index 518a71521..bb60e9013 100644 --- a/doc/html/math_toolkit/main_tr1.html +++ b/doc/html/math_toolkit/main_tr1.html @@ -3,7 +3,7 @@C99 and TR1 C Functions Overview - + diff --git a/doc/html/math_toolkit/mem_typedef.html b/doc/html/math_toolkit/mem_typedef.html index 7c16ddae2..0aad8c6ec 100644 --- a/doc/html/math_toolkit/mem_typedef.html +++ b/doc/html/math_toolkit/mem_typedef.html @@ -3,7 +3,7 @@Quaternion Member Typedefs - + diff --git a/doc/html/math_toolkit/minimum_typdefs.html b/doc/html/math_toolkit/minimum_typdefs.html index 3c6c5ca96..066e51c98 100644 --- a/doc/html/math_toolkit/minimum_typdefs.html +++ b/doc/html/math_toolkit/minimum_typdefs.html @@ -3,7 +3,7 @@Minimum-width floating-point typedefs - + diff --git a/doc/html/math_toolkit/multiprecision.html b/doc/html/math_toolkit/multiprecision.html index 33f74d5db..edc63100f 100644 --- a/doc/html/math_toolkit/multiprecision.html +++ b/doc/html/math_toolkit/multiprecision.html @@ -3,7 +3,7 @@Cost of High-Precision Non-built-in Floating-point - + diff --git a/doc/html/math_toolkit/naive_monte_carlo.html b/doc/html/math_toolkit/naive_monte_carlo.html index 89e91bb60..b8e3c8d46 100644 --- a/doc/html/math_toolkit/naive_monte_carlo.html +++ b/doc/html/math_toolkit/naive_monte_carlo.html @@ -3,7 +3,7 @@Naive Monte Carlo Integration - + diff --git a/doc/html/math_toolkit/namespaces.html b/doc/html/math_toolkit/namespaces.html index 125a44eba..c667a6f09 100644 --- a/doc/html/math_toolkit/namespaces.html +++ b/doc/html/math_toolkit/namespaces.html @@ -3,7 +3,7 @@Namespaces - + diff --git a/doc/html/math_toolkit/navigation.html b/doc/html/math_toolkit/navigation.html index e9e766356..751e91f09 100644 --- a/doc/html/math_toolkit/navigation.html +++ b/doc/html/math_toolkit/navigation.html @@ -3,7 +3,7 @@Navigation - + @@ -27,7 +27,7 @@ Navigation
Boost.Math documentation is provided in both HTML and PDF formats. diff --git a/doc/html/math_toolkit/new_const.html b/doc/html/math_toolkit/new_const.html index f76eb2cac..c2ceb2e24 100644 --- a/doc/html/math_toolkit/new_const.html +++ b/doc/html/math_toolkit/new_const.html @@ -3,7 +3,7 @@
"Given a special function with N arguments of types T1, T2, T3 ... TN, then what type is the result?" @@ -60,8 +60,8 @@
double
+ for the purposes of further analysis.
- 78125 + 171875
- 62500 + 187500
- 93750 + 187500
- 11890625 + 7250000
- 1.1 + 1.0
- 468750 + 703125
- 6.0 + 4.1
- 906250 + 953125
- 15. + 5.1
- 906250 + 953125
- 9.7 + 5.1
- 80859375 + 51171875
- 7.6 + 7.1
- 203125 + 484375 +
++ 2.8 +
++ 0 +
++ 6 +
++ 484375
- 234375 + 500000
- 3.8 -
-- 0 -
-- 6 -
-- 187500 -
-- 2.0 + 2.7
- 10640625 + 7906250
- 1.0 + 1.1
- 234375 + 484375
- 3.0 + 2.8
- 265625 + 515625
- 4.3 + 2.8
- 234375 + 500000
- 2.5 + 2.7
- 26250000 + 18515625
- 2.5 + 2.6
- 296875 + 515625
- 3.8 + 3.0
- 281250 + 515625
- 4.5 + 2.8
- 234375 + 500000
- 2.5 + 2.7
- 32437500 + 22562500
- 3.0 + 3.1
- 906 + 875
- 2.07 + 1.44
- 1312 + 1328
- 1.79 + 1.67
- 1281 + 1328
- 1.75 + 1.67
- 1690625 + 987500
- 1.52 + 1.47
- 640 + 781
- 1.46 + 1.28
- 875 + 984
- 1.19 + 1.24
- 843 + 984
- 1.15 + 1.24
- 1368750 + 801562
- 1.23 + 1.19
- 437 + 609
- 734 + 796
- 734 + 796
- 1109375 + 671875
- 671 + 796
- 1.54 + 1.31
- 1296 + 1453
- 1.77 + 1.83
- 1406 + 1453
- 1.92 + 1.83
- 1462500 + 843750
- 1.32 + 1.26
Fraction of full accuracy 1 @@ -319,12 +318,12 @@
- 457 + 662
- 2.00 + 1.00
- 860 + 985
- 3.54 + 1.31
- 806 + 979
- 3.02 + 1.30
- 226875 + 135312
- 8.11 + 7.16
- 228 + 725
- 1.00 + 1.10
- 243 + 751
- 298 + 753
- 1.12 + 1.00
- 27968 + 18906
- 250 + 748
- 1.10 + 1.13
- 268 + 764
- 1.10 + 1.02
- 267 + 773
- 1.00 + 1.03
- 52812 + 35625
- 1.89 + 1.88
- 256 + 748
- 1.12 + 1.13
- 271 + 762
- 1.12 + 1.01
- 270 + 762
- 61406 + 44687
- 2.20 + 2.36
- 825 + 937
- 3.06 + 1.24
- 1145 + 1240
- 4.06 + 1.56
- 1159 + 1206
- 4.17 + 1.54
- 295781 + 178593
- 8.12 + 6.53
- 270 + 754
- 282 + 793
- 278 + 784
- 36406 + 27343
- 303 + 812
- 1.12 + 1.08
- 329 + 835
- 1.17 + 1.05
- 335 + 835
- 1.21 + 1.07
- 78281 + 55312
- 2.15 + 2.02
- 340 + 821
- 1.26 + 1.09
- 432 + 843
- 1.53 + 1.06
- 367 + 845
- 1.32 + 1.08
- 85156 + 78906
- 2.34 + 2.89
- 714 + 1037
- 3.16 + 1.33
- 909 + 1235
- 4.19 + 1.55
- 793 + 1229
- 3.69 + 1.54
- 211718 + 265781
- 9.28 + 8.18
- 226 + 781
- 217 + 796
- 215 + 796
- 22812 + 32500
- 262 + 818
- 1.16 + 1.05
- 260 + 843
- 1.20 + 1.06
- 260 + 853
- 1.21 + 1.07
- 40781 + 57187
- 1.79 + 1.76
- 332 + 859
- 1.47 + 1.10
- 314 + 896
- 1.45 + 1.13
- 310 + 898
- 1.44 + 1.13
- 67187 + 97500
- 2.95 + 3.00
![]() |
-Home | -Libraries | -People | -FAQ | -More | -
- In the table below, the cube root of 28 was computed for three fundamental - (built-in) types floating-point types, and one Boost.Multiprecision - type cpp_bin_float - using 50 decimal digit precision, using four algorithms. -
-- The 'exact' answer was computed using a 100 decimal digit type: -
-cpp_bin_float_100 full_answer ("3.036588971875662519420809578505669635581453977248111123242141654169177268411884961770250390838097895"); --
- Times were measured using Boost.Timer
- using class cpu_timer.
-
- The cube-root function is a simple function, and is a contrived example - for root-finding. It does allow us to investigate some of the factors controlling - efficiency that may be extrapolated to more complex functions. -
-
- The program used was root_finding_algorithms.cpp.
- 100000 evaluations of each floating-point type and algorithm were used
- and the CPU times were judged from repeat runs to have an uncertainty of
- 10 %. Comparing MSVC for double
- and long double
- (which are identical on this patform) may give a guide to uncertainty of
- timing.
-
- The requested precision was set as follows: -
-|
- - Function - - |
-
- - Precision Requested - - |
-
|---|---|
|
- - TOMS748 - - |
-
- - numeric_limits<T>::digits - 2 - - |
-
|
- - Newton - - |
-
- - floor(numeric_limits<T>::digits * 0.6) - - |
-
|
- - Halley - - |
-
- - floor(numeric_limits<T>::digits * 0.4) - - |
-
|
- - Schröder - - |
-
- - floor(numeric_limits<T>::digits * 0.4) - - |
-
std::cbrt appeared several times as quick
- as the more general boost::math::cbrt,
- on other platforms / compiler options boost::math::cbrt
- is noticeably faster. In general, the results are highly dependent
- on the code-generation / processor architecture selection compiler
- options used. One can assume that the standard library will have been
- compiled with options nearly optimal for the platform
- it was installed on, where as the user has more choice over the options
- used for Boost.Math. Pick something too general/conservative and performance
- suffers, while selecting options that make use of the latest instruction
- set opcodes speed's things up noticeably.
- boost::math::cbrt allows use with any
- user-defined floating-point type, conveniently Boost.Multiprecision.
- It too can take some advantage of the good-behaviour of the cube function,
- compared to the more general implementation in the nth root-finding
- examples. For example, it uses a polynomial approximation to generate
- a better guess than dividing the exponent by three, and can avoid the
- complex checks in Newton-Raphson
- iteration required to prevent the search going wildly off-track.
- For a known precision, it may also be possible to fix the number of
- iterations, allowing inlining and loop unrolling. It also algebraically
- simplifies the Halley steps leading to a big reduction in the number
- of floating point operations required compared to a "black box"
- implementation that calculates the derivatives seperately and then
- combines them in the Halley code. Typically, it was found that computation
- using type double took
- a few times longer when using the various root-finding algorithms directly
- rather than the hand coded/optimized cbrt
- routine.
- cpp_bin_float_50
- for a precision of 50 decimal digits took a lot longer, as expected
- because most computation uses software rather than 64-bit floating-point
- hardware. Speeds are often more than 50 times slower.
- cpp_bin_float_50,
- TOMS Algorithm
- 748: enclosing zeros of continuous functions was much slower
- showing the benefit of using derivatives. Newton-Raphson
- iteration was found to be twice as quick as either of the second-derivative
- methods: this is an extreme case though, the function and its derivatives
- are so cheap to compute that we're really measuring the complexity
- of the boilerplate root-finding code.
- Table 12.1. Cube root(28) for float, double, long double and cpp_bin_float_50
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algorithm - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - cbrt - - |
-
- - 0 - - |
-
- - 62500 - - |
-
- - 1.0 - - |
-
- - 0 - - |
-- | -
- - 0 - - |
-
- - 46875 - - |
-
- - 1.0 - - |
-
- - 1 - - |
-- | -
- - 0 - - |
-
- - 62500 - - |
-
- - 1.0 - - |
-
- - 1 - - |
-- | -
- - 0 - - |
-
- - 5750000 - - |
-
- - 1.1 - - |
-
- - 0 - - |
-- | -
|
- - TOMS748 - - |
-
- - 8 - - |
-
- - 343750 - - |
-
- - 5.5 - - |
-
- - -1 - - |
-- | -
- - 11 - - |
-
- - 531250 - - |
-
- - 11. - - |
-
- - 2 - - |
-- | -
- - 11 - - |
-
- - 531250 - - |
-
- - 8.5 - - |
-
- - 2 - - |
-- | -
- - 6 - - |
-
- - 40031250 - - |
-
- - 7.4 - - |
-
- - -2 - - |
-- | -
|
- - Newton - - |
-
- - 5 - - |
-
- - 171875 - - |
-
- - 2.8 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 187500 - - |
-
- - 4.0 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 187500 - - |
-
- - 3.0 - - |
-
- - 0 - - |
-- | -
- - 2 - - |
-
- - 5406250 - - |
-
- - 1.0 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 3 - - |
-
- - 187500 - - |
-
- - 3.0 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 218750 - - |
-
- - 4.7 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 203125 - - |
-
- - 3.3 - - |
-
- - 0 - - |
-- | -
- - 2 - - |
-
- - 12968750 - - |
-
- - 2.4 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 4 - - |
-
- - 203125 - - |
-
- - 3.3 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 250000 - - |
-
- - 5.3 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 218750 - - |
-
- - 3.5 - - |
-
- - 0 - - |
-- | -
- - 2 - - |
-
- - 15984375 - - |
-
- - 3.0 - - |
-
- - 0 - - |
-- | -
Table 12.2. Cube root(28) for float, double, long double and cpp_bin_float_50
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algorithm - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - cbrt - - |
-
- - 0 - - |
-
- - 46875 - - |
-
- - 1.0 - - |
-
- - 0 - - |
-- | -
- - 0 - - |
-
- - 125000 - - |
-
- - 1.0 - - |
-
- - 0 - - |
-- | -
- - 0 - - |
-
- - 109375 - - |
-
- - 1.0 - - |
-
- - 0 - - |
-- | -
- - 0 - - |
-
- - 3875000 - - |
-
- - 1.0 - - |
-
- - 0 - - |
-- | -
|
- - TOMS748 - - |
-
- - 8 - - |
-
- - 281250 - - |
-
- - 6.0 - - |
-
- - -1 - - |
-- | -
- - 11 - - |
-
- - 453125 - - |
-
- - 3.6 - - |
-
- - 2 - - |
-- | -
- - 10 - - |
-
- - 1750000 - - |
-
- - 16. - - |
-
- - -1 - - |
-- | -
- - 6 - - |
-
- - 30312500 - - |
-
- - 7.8 - - |
-
- - -2 - - |
-- | -
|
- - Newton - - |
-
- - 5 - - |
-
- - 109375 - - |
-
- - 2.3 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 140625 - - |
-
- - 1.1 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 281250 - - |
-
- - 2.6 - - |
-
- - 0 - - |
-- | -
- - 2 - - |
-
- - 4125000 - - |
-
- - 1.1 - - |
-
- - -1 - - |
-- | -
|
- - Halley - - |
-
- - 3 - - |
-
- - 125000 - - |
-
- - 2.7 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 140625 - - |
-
- - 1.1 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 515625 - - |
-
- - 4.7 - - |
-
- - 0 - - |
-- | -
- - 2 - - |
-
- - 9171875 - - |
-
- - 2.4 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 4 - - |
-
- - 140625 - - |
-
- - 3.0 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 171875 - - |
-
- - 1.4 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 671875 - - |
-
- - 6.1 - - |
-
- - 0 - - |
-- | -
- - 2 - - |
-
- - 10578125 - - |
-
- - 2.7 - - |
-
- - 0 - - |
-- | -
| - | - |
![]() |
-Home | -Libraries | -People | -FAQ | -More | -
- A second example compares four root finding algorithms for locating the
- second radius of an ellipse with first radius 28 and arc length 300, for
- four floating-point types, float,
- double, long
- double and a Boost.Multiprecision
- type cpp_bin_float_50.
-
- Which is to say we're solving: -
-4xE(sqrt(1 - 282 / x2)) - 300 = 0-
- In each case the target accuracy was set using our "recomended" - accuracy limits (or at least limits that make a good starting point - which - is likely to give close to full accuracy without resorting to unnecessary - iterations). -
-|
- - Function - - |
-
- - Precision Requested - - |
-
|---|---|
|
- - TOMS748 - - |
-
- - numeric_limits<T>::digits - 2 - - |
-
|
- - Newton - - |
-
- - floor(numeric_limits<T>::digits * 0.6) - - |
-
|
- - Halley - - |
-
- - floor(numeric_limits<T>::digits * 0.4) - - |
-
|
- - Schröder - - |
-
- - floor(numeric_limits<T>::digits * 0.4) - - |
-
- Tests used Microsoft Visual Studio 2013 (Update 1) and GCC 4.9.1 using - source code root_elliptic_finding.cpp. -
-- The timing uncertainty (especially using MSVC) is at least 5% of normalized - time 'Norm'. -
-- To pick out the 'best' and 'worst' algorithms are highlighted in blue and - red. More than one result can be 'best' when normalized times are indistinguishable - within the uncertainty. -
-Table 12.12. root with radius 28 and arc length 300) for float, double, long - double and cpp_bin_float_50 types, using _X86_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 5 - - |
-
- - 828 - - |
-
- - 1.15 - - |
-
- - -1 - - |
-- | -
- - 9 - - |
-
- - 1453 - - |
-
- - 1.52 - - |
-
- - 1 - - |
-- | -
- - 9 - - |
-
- - 1437 - - |
-
- - 1.56 - - |
-
- - 1 - - |
-- | -
- - 11 - - |
-
- - 1326562 - - |
-
- - 1.46 - - |
-
- - -3 - - |
-- | -
|
- - Newton - - |
-
- - 3 - - |
-
- - 890 - - |
-
- - 1.24 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 1156 - - |
-
- - 1.21 - - |
-
- - 1 - - |
-- | -
- - 4 - - |
-
- - 1171 - - |
-
- - 1.27 - - |
-
- - 1 - - |
-- | -
- - 5 - - |
-
- - 1089062 - - |
-
- - 1.20 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 2 - - |
-
- - 718 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 953 - - |
-
- - 1.00 - - |
-
- - 3 - - |
-- | -
- - 3 - - |
-
- - 921 - - |
-
- - 1.00 - - |
-
- - 3 - - |
-- | -
- - 4 - - |
-
- - 909375 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 3 - - |
-
- - 906 - - |
-
- - 1.26 - - |
-
- - -1 - - |
-- | -
- - 6 - - |
-
- - 1703 - - |
-
- - 1.79 - - |
-
- - 1 - - |
-- | -
- - 6 - - |
-
- - 1687 - - |
-
- - 1.83 - - |
-
- - 1 - - |
-- | -
- - 5 - - |
-
- - 1131250 - - |
-
- - 1.24 - - |
-
- - -2 - - |
-- | -
Table 12.13. root with radius 28 and arc length 300) for float, double, long - double and cpp_bin_float_50 types, using _X64_AVX
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 5 - - |
-
- - 500 - - |
-
- - 1.33 - - |
-
- - -1 - - |
-- | -
- - 9 - - |
-
- - 1046 - - |
-
- - 1.72 - - |
-
- - 1 - - |
-- | -
- - 9 - - |
-
- - 1062 - - |
-
- - 1.70 - - |
-
- - 1 - - |
-- | -
- - 11 - - |
-
- - 698437 - - |
-
- - 1.54 - - |
-
- - -3 - - |
-- | -
|
- - Newton - - |
-
- - 3 - - |
-
- - 484 - - |
-
- - 1.29 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 734 - - |
-
- - 1.21 - - |
-
- - 1 - - |
-- | -
- - 4 - - |
-
- - 687 - - |
-
- - 1.10 - - |
-
- - 1 - - |
-- | -
- - 5 - - |
-
- - 545312 - - |
-
- - 1.20 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 2 - - |
-
- - 375 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 609 - - |
-
- - 1.00 - - |
-
- - 3 - - |
-- | -
- - 3 - - |
-
- - 625 - - |
-
- - 1.00 - - |
-
- - 3 - - |
-- | -
- - 4 - - |
-
- - 453125 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 3 - - |
-
- - 546 - - |
-
- - 1.46 - - |
-
- - -1 - - |
-- | -
- - 6 - - |
-
- - 1109 - - |
-
- - 1.82 - - |
-
- - 1 - - |
-- | -
- - 6 - - |
-
- - 1187 - - |
-
- - 1.90 - - |
-
- - 1 - - |
-- | -
- - 5 - - |
-
- - 564062 - - |
-
- - 1.24 - - |
-
- - -2 - - |
-- | -
Table 12.14. root with radius 28 and arc length 300) for float, double, long - double and cpp_bin_float_50 types, using _X64_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 5 - - |
-
- - 437 - - |
-
- - 1.17 - - |
-
- - -1 - - |
-- | -
- - 8 - - |
-
- - 1234 - - |
-
- - 1.08 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 2562 - - |
-
- - 1.48 - - |
-
- - 4 - - |
-- | -
- - 11 - - |
-
- - 657812 - - |
-
- - 1.49 - - |
-
- - -3 - - |
-- | -
|
- - Newton - - |
-
- - 3 - - |
-
- - 437 - - |
-
- - 1.17 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 1421 - - |
-
- - 1.25 - - |
-
- - 1 - - |
-- | -
- - 4 - - |
-
- - 2031 - - |
-
- - 1.17 - - |
-
- - 1 - - |
-- | -
- - 5 - - |
-
- - 550000 - - |
-
- - 1.25 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 2 - - |
-
- - 375 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 1140 - - |
-
- - 1.00 - - |
-
- - 1 - - |
-- | -
- - 3 - - |
-
- - 1734 - - |
-
- - 1.00 - - |
-
- - 7 - - |
-- | -
- - 4 - - |
-
- - 440625 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 3 - - |
-
- - 500 - - |
-
- - 1.33 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 1484 - - |
-
- - 1.30 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 2156 - - |
-
- - 1.24 - - |
-
- - 3 - - |
-- | -
- - 5 - - |
-
- - 535937 - - |
-
- - 1.22 - - |
-
- - -2 - - |
-- | -
- Remarks: -
-| - | - |
![]() |
-Home | -Libraries | -People | -FAQ | -More | -
- A second example compares four generalized nth-root finding algorithms
- for various n-th roots (5, 7 and 13) of a single value 28.0, for four floating-point
- types, float, double, long
- double and a Boost.Multiprecision
- type cpp_bin_float_50.
- In each case the target accuracy was set using our "recomended"
- accuracy limits (or at least limits that make a good starting point - which
- is likely to give close to full accuracy without resorting to unnecessary
- iterations).
-
|
- - Function - - |
-
- - Precision Requested - - |
-
|---|---|
|
- - TOMS748 - - |
-
- - numeric_limits<T>::digits - 2 - - |
-
|
- - Newton - - |
-
- - floor(numeric_limits<T>::digits * 0.6) - - |
-
|
- - Halley - - |
-
- - floor(numeric_limits<T>::digits * 0.4) - - |
-
|
- - Schröder - - |
-
- - floor(numeric_limits<T>::digits * 0.4) - - |
-
- Tests used Microsoft Visual Studio 2013 (Update 1) and GCC 4.9.1 using - source code root_n_finding_algorithms.cpp. -
-- The timing uncertainty (especially using MSVC) is at least 5% of normalized - time 'Norm'. -
-- To pick out the 'best' and 'worst' algorithms are highlighted in blue and - red. More than one result can be 'best' when normalized times are indistinguishable - within the uncertainty. -
-- Fraction of full accuracy 1 -
-Table 12.3. 5th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X86_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 7 - - |
-
- - 795 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 11 - - |
-
- - 1106 - - |
-
- - 1.26 - - |
-
- - 1 - - |
-- | -
- - 11 - - |
-
- - 1135 - - |
-
- - 1.43 - - |
-
- - 1 - - |
-- | -
- - 12 - - |
-
- - 148750 - - |
-
- - 7.50 - - |
-
- - 0 - - |
-- | -
|
- - Newton - - |
-
- - 3 - - |
-
- - 839 - - |
-
- - 1.06 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 879 - - |
-
- - 1.00 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 871 - - |
-
- - 1.09 - - |
-
- - -1 - - |
-- | -
- - 6 - - |
-
- - 19843 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 2 - - |
-
- - 843 - - |
-
- - 1.06 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 903 - - |
-
- - 1.03 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 859 - - |
-
- - 1.08 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 37968 - - |
-
- - 1.91 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 2 - - |
-
- - 867 - - |
-
- - 1.09 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 920 - - |
-
- - 1.05 - - |
-
- - -1 - - |
-- | -
- - 3 - - |
-
- - 796 - - |
-
- - 1.00 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 47187 - - |
-
- - 2.38 - - |
-
- - 0 - - |
-- | -
Table 12.4. 7th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X86_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 12 - - |
-
- - 959 - - |
-
- - 1.26 - - |
-
- - 1 - - |
-- | -
- - 15 - - |
-
- - 1214 - - |
-
- - 1.56 - - |
-
- - 2 - - |
-- | -
- - 15 - - |
-
- - 1209 - - |
-
- - 1.52 - - |
-
- - 2 - - |
-- | -
- - 14 - - |
-
- - 184531 - - |
-
- - 6.79 - - |
-
- - 0 - - |
-- | -
|
- - Newton - - |
-
- - 5 - - |
-
- - 764 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 776 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 796 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 27187 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 4 - - |
-
- - 795 - - |
-
- - 1.04 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 826 - - |
-
- - 1.06 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 865 - - |
-
- - 1.09 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 55625 - - |
-
- - 2.05 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 5 - - |
-
- - 826 - - |
-
- - 1.08 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 831 - - |
-
- - 1.07 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 832 - - |
-
- - 1.05 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 78750 - - |
-
- - 2.90 - - |
-
- - 0 - - |
-- | -
Table 12.5. 11th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X86_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 12 - - |
-
- - 1059 - - |
-
- - 1.37 - - |
-
- - -2 - - |
-- | -
- - 14 - - |
-
- - 1253 - - |
-
- - 1.60 - - |
-
- - 2 - - |
-- | -
- - 14 - - |
-
- - 1251 - - |
-
- - 1.60 - - |
-
- - 2 - - |
-- | -
- - 17 - - |
-
- - 275468 - - |
-
- - 8.81 - - |
-
- - 2 - - |
-- | -
|
- - Newton - - |
-
- - 6 - - |
-
- - 771 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 784 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 784 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 9 - - |
-
- - 31250 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 4 - - |
-
- - 828 - - |
-
- - 1.07 - - |
-
- - -1 - - |
-- | -
- - 5 - - |
-
- - 831 - - |
-
- - 1.06 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 826 - - |
-
- - 1.05 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 56718 - - |
-
- - 1.81 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 6 - - |
-
- - 875 - - |
-
- - 1.13 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 881 - - |
-
- - 1.12 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 881 - - |
-
- - 1.12 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 97031 - - |
-
- - 3.10 - - |
-
- - 0 - - |
-- | -
- Fraction of full accuracy 1 -
-Table 12.6. 5th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X64_AVX
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 7 - - |
-
- - 239 - - |
-
- - 1.50 - - |
-
- - 0 - - |
-- | -
- - 11 - - |
-
- - 451 - - |
-
- - 2.53 - - |
-
- - 1 - - |
-- | -
- - 11 - - |
-
- - 439 - - |
-
- - 2.49 - - |
-
- - 1 - - |
-- | -
- - 12 - - |
-
- - 90312 - - |
-
- - 7.51 - - |
-
- - 0 - - |
-- | -
|
- - Newton - - |
-
- - 3 - - |
-
- - 159 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 178 - - |
-
- - 1.00 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 176 - - |
-
- - 1.00 - - |
-
- - -1 - - |
-- | -
- - 6 - - |
-
- - 12031 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 2 - - |
-
- - 168 - - |
-
- - 1.06 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 203 - - |
-
- - 1.14 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 198 - - |
-
- - 1.13 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 20937 - - |
-
- - 1.74 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 2 - - |
-
- - 173 - - |
-
- - 1.09 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 206 - - |
-
- - 1.16 - - |
-
- - -1 - - |
-- | -
- - 3 - - |
-
- - 203 - - |
-
- - 1.15 - - |
-
- - -1 - - |
-- | -
- - 4 - - |
-
- - 26250 - - |
-
- - 2.18 - - |
-
- - 0 - - |
-- | -
Table 12.7. 7th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X64_AVX
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 12 - - |
-
- - 385 - - |
-
- - 2.19 - - |
-
- - 1 - - |
-- | -
- - 15 - - |
-
- - 635 - - |
-
- - 3.13 - - |
-
- - 2 - - |
-- | -
- - 15 - - |
-
- - 621 - - |
-
- - 3.17 - - |
-
- - 2 - - |
-- | -
- - 14 - - |
-
- - 114843 - - |
-
- - 6.81 - - |
-
- - 0 - - |
-- | -
|
- - Newton - - |
-
- - 5 - - |
-
- - 176 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 203 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 196 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 16875 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 4 - - |
-
- - 209 - - |
-
- - 1.19 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 254 - - |
-
- - 1.25 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 246 - - |
-
- - 1.26 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 32343 - - |
-
- - 1.92 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 5 - - |
-
- - 223 - - |
-
- - 1.27 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 273 - - |
-
- - 1.34 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 275 - - |
-
- - 1.40 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 45156 - - |
-
- - 2.68 - - |
-
- - 0 - - |
-- | -
Table 12.8. 11th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X64_AVX
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 12 - - |
-
- - 467 - - |
-
- - 2.42 - - |
-
- - -2 - - |
-- | -
- - 14 - - |
-
- - 648 - - |
-
- - 3.06 - - |
-
- - 2 - - |
-- | -
- - 14 - - |
-
- - 640 - - |
-
- - 2.99 - - |
-
- - 2 - - |
-- | -
- - 17 - - |
-
- - 170000 - - |
-
- - 8.85 - - |
-
- - 2 - - |
-- | -
|
- - Newton - - |
-
- - 6 - - |
-
- - 193 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 212 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 214 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 9 - - |
-
- - 19218 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 4 - - |
-
- - 209 - - |
-
- - 1.08 - - |
-
- - -1 - - |
-- | -
- - 5 - - |
-
- - 256 - - |
-
- - 1.21 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 250 - - |
-
- - 1.17 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 32656 - - |
-
- - 1.70 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 6 - - |
-
- - 248 - - |
-
- - 1.28 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 306 - - |
-
- - 1.44 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 298 - - |
-
- - 1.39 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 53437 - - |
-
- - 2.78 - - |
-
- - 0 - - |
-- | -
- Fraction of full accuracy 1 -
-Table 12.9. 5th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X64_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 7 - - |
-
- - 260 - - |
-
- - 2.26 - - |
-
- - 0 - - |
-- | -
- - 11 - - |
-
- - 481 - - |
-
- - 3.51 - - |
-
- - 1 - - |
-- | -
- - 9 - - |
-
- - 1526 - - |
-
- - 6.78 - - |
-
- - 0 - - |
-- | -
- - 12 - - |
-
- - 70937 - - |
-
- - 8.11 - - |
-
- - 0 - - |
-- | -
|
- - Newton - - |
-
- - 3 - - |
-
- - 115 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 137 - - |
-
- - 1.00 - - |
-
- - -1 - - |
-- | -
- - 5 - - |
-
- - 225 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 8750 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 2 - - |
-
- - 135 - - |
-
- - 1.17 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 162 - - |
-
- - 1.18 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 412 - - |
-
- - 1.83 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 14687 - - |
-
- - 1.68 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 2 - - |
-
- - 135 - - |
-
- - 1.17 - - |
-
- - 0 - - |
-- | -
- - 3 - - |
-
- - 170 - - |
-
- - 1.24 - - |
-
- - -1 - - |
-- | -
- - 3 - - |
-
- - 425 - - |
-
- - 1.89 - - |
-
- - 0 - - |
-- | -
- - 4 - - |
-
- - 18906 - - |
-
- - 2.16 - - |
-
- - 0 - - |
-- | -
Table 12.10. 7th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X64_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 12 - - |
-
- - 465 - - |
-
- - 3.39 - - |
-
- - 1 - - |
-- | -
- - 15 - - |
-
- - 662 - - |
-
- - 4.24 - - |
-
- - 2 - - |
-- | -
- - 13 - - |
-
- - 2304 - - |
-
- - 8.17 - - |
-
- - 0 - - |
-- | -
- - 14 - - |
-
- - 91093 - - |
-
- - 7.29 - - |
-
- - 0 - - |
-- | -
|
- - Newton - - |
-
- - 5 - - |
-
- - 137 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 156 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 282 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 12500 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 4 - - |
-
- - 181 - - |
-
- - 1.32 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 210 - - |
-
- - 1.35 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 540 - - |
-
- - 1.91 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 24062 - - |
-
- - 1.92 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 5 - - |
-
- - 201 - - |
-
- - 1.47 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 242 - - |
-
- - 1.55 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 660 - - |
-
- - 2.34 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 35625 - - |
-
- - 2.85 - - |
-
- - 0 - - |
-- | -
Table 12.11. 11th root(28) for float, double, long double and cpp_bin_float_50 - types, using _X64_SSE2
-| - | -
- - float - - |
-- | -- | -- | -- | -
- - double - - |
-- | -- | -- | -- | -
- - long d - - |
-- | -- | -- | -- | -
- - cpp50 - - |
-- | -- | -- | - |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- - Algo - - |
-
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
- - Its - - |
-
- - Times - - |
-
- - Norm - - |
-
- - Dis - - |
-- | -
|
- - TOMS748 - - |
-
- - 12 - - |
-
- - 562 - - |
-
- - 3.53 - - |
-
- - -2 - - |
-- | -
- - 14 - - |
-
- - 701 - - |
-
- - 3.85 - - |
-
- - 2 - - |
-- | -
- - 14 - - |
-
- - 2665 - - |
-
- - 9.10 - - |
-
- - 1 - - |
-- | -
- - 17 - - |
-
- - 137968 - - |
-
- - 9.60 - - |
-
- - 2 - - |
-- | -
|
- - Newton - - |
-
- - 6 - - |
-
- - 159 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 182 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 293 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
- - 9 - - |
-
- - 14375 - - |
-
- - 1.00 - - |
-
- - 0 - - |
-- | -
|
- - Halley - - |
-
- - 4 - - |
-
- - 185 - - |
-
- - 1.16 - - |
-
- - -1 - - |
-- | -
- - 5 - - |
-
- - 220 - - |
-
- - 1.21 - - |
-
- - 0 - - |
-- | -
- - 5 - - |
-
- - 757 - - |
-
- - 2.58 - - |
-
- - 0 - - |
-- | -
- - 6 - - |
-
- - 26093 - - |
-
- - 1.82 - - |
-
- - 0 - - |
-- | -
|
- - Schröder - - |
-
- - 6 - - |
-
- - 246 - - |
-
- - 1.55 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 279 - - |
-
- - 1.53 - - |
-
- - 0 - - |
-- | -
- - 7 - - |
-
- - 1135 - - |
-
- - 3.87 - - |
-
- - 0 - - |
-- | -
- - 8 - - |
-
- - 41093 - - |
-
- - 2.86 - - |
-
- - 0 - - |
-- | -
- Some tentative conclusions can be drawn from this limited exercise. -
-double.
- double allows convergence to the final
- exact result in one or two iterations. So in this contrived example,
- crudely dividing the exponent by N for a 'guess', it would be far better
- to use a pow<double>
- or , if more precise pow<long double>,
- function to estimate a 'guess'. The limitation of this tactic is that
- the range of possible (exponent) values may be less than the multiprecision
- type.
- - Clearly, your mileage will vary, but in - summary, Newton-Raphson - iteration seems the first choice of algorithm, and effort to find - a good 'guess' the first speed-up target, especially for Boost.Multiprecision. - And of course, compiler optimisation is crucial for speed. -
-| - | - |
(See also the reference documentation for the Noncentral
diff --git a/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html b/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html
index 418a61257..d8f2ebfb9 100644
--- a/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html
+++ b/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html
@@ -3,7 +3,7 @@
(See also the reference documentation for the Normal
diff --git a/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html b/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html
index e8fdd6bfc..991fd993e 100644
--- a/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html
+++ b/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html
@@ -3,7 +3,7 @@
| diff --git a/doc/html/math_toolkit/zetas/zeta.html b/doc/html/math_toolkit/zetas/zeta.html index b9af300dc..d575ff6ed 100644 --- a/doc/html/math_toolkit/zetas/zeta.html +++ b/doc/html/math_toolkit/zetas/zeta.html @@ -3,7 +3,7 @@ |