added documentation for FastMath in user guide.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1169438 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Luc Maisonobe 2011-09-11 12:36:00 +00:00
parent d33eb89423
commit bcabb90464
2 changed files with 67 additions and 3 deletions

View File

@ -89,7 +89,9 @@
<li><a href="utilities.html#a6.2_Double_array_utilities">6.2 Double array utilities</a></li>
<li><a href="utilities.html#a6.3_intdouble_hash_map">6.3 int/double hash map</a></li>
<li><a href="utilities.html#a6.4_Continued_Fractions">6.4 Continued Fractions</a></li>
<li><a href="utilities.html#a6.5_binomial_coefficients_factorials_and_other_common_math_functions">6.5 binomial coefficients, factorials and other common math functions</a></li>
<li><a href="utilities.html#a6.5_binomial_coefficients_factorials_and_other_common_math_functions">6.5 Binomial coefficients, factorials and other common math functions</a></li>
<li><a href="utilities.html#a6.6_fast_math">6.6 Fast mathematical functions</a></li>
<li><a href="utilities.html#a6.7_miscellaneous">6.7 Miscellaneous</a></li>
</ul></li>
<li><a href="complex.html">7. Complex Numbers</a>
<ul>

View File

@ -146,7 +146,7 @@
</p>
</subsection>
<subsection name="6.5 binomial coefficients, factorials and other common math functions" href="math_utils">
<subsection name="6.5 Binomial coefficients, factorials and other common math functions" href="binomial_coefficients_factorials_and_other_common_math_functions">
<p>
A collection of reusable math functions is provided in the
<a href="../apidocs/org/apache/commons/math/util/MathUtils.html">MathUtils</a>
@ -182,7 +182,69 @@
</p>
</subsection>
<subsection name="6.7 Miscellaneous" href="math_utils">
<subsection name="6.6 Fast mathematical functions" href="fast_math">
<p>
Apache Commons Math provides a faster, more accurate, portable alternative
to the regular <code>Math</code> and <code>StrictMath</code>classes for large
scale computation.
</p>
<p>
FastMath is a drop-in replacement for both Math and StrictMath. This
means that for any method in Math (say <code>Math.sin(x)</code> or
<code>Math.cbrt(y)</code>), user can directly change the class and use the
methods as is (using <code>FastMath.sin(x)</code> or <code>FastMath.cbrt(y)</code>
in the previous example).
</p>
<p>
FastMath speed is achieved by relying heavily on optimizing compilers to
native code present in many JVM todays and use of large tables. Precomputed
literal arrays are provided in this class to speed up load time. These
precomputed tables are used in the default configuration, to improve speed
even at first use of the class. If users prefer to compute the tables
automatically at load time, they can change a compile-time constant. This will
increase class load time at first use, but this overhead will occur only once
per run, regardless of the number of subsequent calls to computation methods.
Note that FastMath is extensively used inside Apache Commons Math, so by
calling some algorithms, the one-shot overhead when the constant is set to
false will occur regardless of the end-user calling FastMath methods directly
or not. Performance figures for a specific JVM and hardware can be evaluated by
running the FastMathTestPerformance tests in the test directory of the source
distribution.
</p>
<p>
FastMath accuracy should be mostly independent of the JVM as it relies only
on IEEE-754 basic operations and on embedded tables. Almost all operations
are accurate to about 0.5 ulp throughout the domain range. This statement, of
course is only a rough global observed behavior, it is <em>not</em> a guarantee
for <em>every</em> double numbers input (see William Kahan's <a
href="http://en.wikipedia.org/wiki/Rounding#The_table-maker.27s_dilemma">Table
Maker's Dilemma</a>).
</p>
<p>
FastMath additionally implements the following methods not found in Math/StrictMath:
<ul>
<li>asinh(double)</li>
<li>acosh(double)</li>
<li>atanh(double)</li>
</ul>
The following methods are found in Math/StrictMath since 1.6 only, they are
provided by FastMath even in 1.5 Java virtual machines
<ul>
<li>copySign(double, double)</li>
<li>getExponent(double)</li>
<li>nextAfter(double,double)</li>
<li>nextUp(double)</li>
<li>scalb(double, int)</li>
<li>copySign(float, float)</li>
<li>getExponent(float)</li>
<li>nextAfter(float,double)</li>
<li>nextUp(float)</li>
<li>scalb(float, int)</li>
</ul>
</p>
</subsection>
<subsection name="6.7 Miscellaneous" href="miscellaneous">
The <a href="../apidocs/org/apache/commons/math/util/MultidimensionalCounter.html">
MultidimensionalCounter</a> is a utility class that converts a set of indices
(identifying points in a multidimensional space) to a single index (e.g. identifying