|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.commons.math3.util.FastMath
public class FastMath
Faster, more accurate, portable alternative to Math
and
StrictMath
for large scale computation.
FastMath is a drop-in replacement for both Math and StrictMath. This
means that for any method in Math (say Math.sin(x)
or
Math.cbrt(y)
), user can directly change the class and use the
methods as is (using FastMath.sin(x)
or FastMath.cbrt(y)
in the previous example).
FastMath speed is achieved by relying heavily on optimizing compilers to native code present in many JVMs today and use of large tables. The larger tables are lazily initialised on first use, so that the setup time does not penalise methods that don't need them.
Note that FastMath is extensively used inside Apache Commons Math, so by calling some algorithms, the overhead when the the tables need to be intialised 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.
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 not a guarantee for every double numbers input (see William Kahan's Table Maker's Dilemma).
FastMath additionally implements the following methods not found in Math/StrictMath:
The following methods are found in Math/StrictMath since 1.6 only, they are provided by FastMath even in 1.5 Java virtual machinescopySign(double, double)
getExponent(double)
nextAfter(double,double)
nextUp(double)
scalb(double, int)
copySign(float, float)
getExponent(float)
nextAfter(float,double)
nextUp(float)
scalb(float, int)
This version of FastMath never returns Double.NaN values. If result cannot be returned because undefined, an ArithmeticException is returned.
Field Summary | |
---|---|
static double |
E
Napier's constant e, base of the natural logarithm. |
static double |
PI
Archimede's constant PI, ratio of circle circumference to diameter. |
Method Summary | |
---|---|
static double |
abs(double x)
Absolute value. |
static float |
abs(float x)
Absolute value. |
static int |
abs(int x)
Absolute value. |
static long |
abs(long x)
Absolute value. |
static double |
acos(double x)
Compute the arc cosine of a number. |
static double |
acosh(double a)
Compute the inverse hyperbolic cosine of a number. |
static double |
asin(double x)
Compute the arc sine of a number. |
static double |
asinh(double a)
Compute the inverse hyperbolic sine of a number. |
static double |
atan(double x)
Arctangent function |
static double |
atan2(double y,
double x)
Two arguments arctangent function |
static double |
atanh(double a)
Compute the inverse hyperbolic tangent of a number. |
static double |
cbrt(double x)
Compute the cubic root of a number. |
static double |
ceil(double x)
Get the smallest whole number larger than x. |
static double |
copySign(double magnitude,
double sign)
Returns the first argument with the sign of the second argument. |
static float |
copySign(float magnitude,
float sign)
Returns the first argument with the sign of the second argument. |
static double |
cos(double x)
Cosine function. |
static double |
cosh(double x)
Compute the hyperbolic cosine of a number. |
static double |
divide(double x,
double y)
Computes x / y |
static double |
exp(double x)
Exponential function. |
static double |
expm1(double x)
Compute exp(x) - 1 |
static double |
floor(double x)
Get the largest whole number smaller than x. |
static int |
getExponent(double d)
Return the exponent of a double number, removing the bias. |
static int |
getExponent(float f)
Return the exponent of a float number, removing the bias. |
static double |
hypot(double x,
double y)
Returns the hypotenuse of a triangle with sides x and y
- sqrt(x2 +y2)avoiding intermediate overflow or underflow. |
static double |
IEEEremainder(double dividend,
double divisor)
Computes the remainder as prescribed by the IEEE 754 standard. |
static double |
log(double x)
Natural logarithm. |
static double |
log(double base,
double x)
Computes the logarithm in a given base. |
static double |
log10(double x)
Compute the base 10 logarithm. |
static double |
log1p(double x)
Computes log(1 + x). |
static void |
main(String[] a)
Print out contents of arrays, and check the length. |
static double |
max(double a,
double b)
Compute the maximum of two values |
static float |
max(float a,
float b)
Compute the maximum of two values |
static int |
max(int a,
int b)
Compute the maximum of two values |
static long |
max(long a,
long b)
Compute the maximum of two values |
static double |
min(double a,
double b)
Compute the minimum of two values |
static float |
min(float a,
float b)
Compute the minimum of two values |
static int |
min(int a,
int b)
Compute the minimum of two values |
static long |
min(long a,
long b)
Compute the minimum of two values |
static double |
nextAfter(double d,
double direction)
Get the next machine representable number after a number, moving in the direction of another number. |
static float |
nextAfter(float f,
double direction)
Get the next machine representable number after a number, moving in the direction of another number. |
static double |
nextUp(double a)
Compute next number towards positive infinity. |
static float |
nextUp(float a)
Compute next number towards positive infinity. |
static double |
pow(double x,
double y)
Power function. |
static double |
pow(double d,
int e)
Raise a double to an int power. |
static double |
random()
Returns a pseudo-random number between 0.0 and 1.0. |
static double |
rint(double x)
Get the whole number that is the nearest to x, or the even one if x is exactly half way between two integers. |
static long |
round(double x)
Get the closest long to x. |
static int |
round(float x)
Get the closest int to x. |
static double |
scalb(double d,
int n)
Multiply a double number by a power of 2. |
static float |
scalb(float f,
int n)
Multiply a float number by a power of 2. |
static double |
signum(double a)
Compute the signum of a number. |
static float |
signum(float a)
Compute the signum of a number. |
static double |
sin(double x)
Sine function. |
static double |
sinh(double x)
Compute the hyperbolic sine of a number. |
static double |
sqrt(double a)
Compute the square root of a number. |
static double |
tan(double x)
Tangent function. |
static double |
tanh(double x)
Compute the hyperbolic tangent of a number. |
static double |
toDegrees(double x)
Convert radians to degrees, with error of less than 0.5 ULP |
static double |
toRadians(double x)
Convert degrees to radians, with error of less than 0.5 ULP |
static double |
ulp(double x)
Compute least significant bit (Unit in Last Position) for a number. |
static float |
ulp(float x)
Compute least significant bit (Unit in Last Position) for a number. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final double PI
public static final double E
Method Detail |
---|
public static double sqrt(double a) throws ArithmeticException
Note: this implementation currently delegates to Math.sqrt(double)
a
- number on which evaluation is done
ArithmeticException
- thrown if a < 0 or a is NaNpublic static double cosh(double x) throws ArithmeticException
x
- number on which evaluation is done
ArithmeticException
- thrown if x is NaNpublic static double sinh(double x) throws ArithmeticException
x
- number on which evaluation is done
ArithmeticException
- thrown if x is NaNpublic static double tanh(double x) throws ArithmeticException
x
- number on which evaluation is done
ArithmeticException
- thrown if a is NaNpublic static double acosh(double a) throws ArithmeticException
a
- number on which evaluation is done
ArithmeticException
- thrown if a < 1 or a is NaNpublic static double asinh(double a) throws ArithmeticException
a
- number on which evaluation is done
ArithmeticException
- thrown if a is NaNpublic static double atanh(double a) throws ArithmeticException
a
- number on which evaluation is done
ArithmeticException
- thrown if a > 1 or a < -1 or a is NaNpublic static double signum(double a) throws ArithmeticException
a
- number on which evaluation is done
ArithmeticException
- thrown if a is NaNpublic static float signum(float a) throws ArithmeticException
a
- number on which evaluation is done
ArithmeticException
- thrown if a is NaNpublic static double nextUp(double a) throws ArithmeticException
a
- number to which neighbor should be computed
ArithmeticException
- thrown if a is NaNpublic static float nextUp(float a) throws ArithmeticException
a
- number to which neighbor should be computed
ArithmeticException
- thrown if a is NaNpublic static double random()
Note: this implementation currently delegates to Math.random()
public static double exp(double x) throws ArithmeticException
x
- a double
ArithmeticException
- thrown if x is NaNpublic static double expm1(double x) throws ArithmeticException
x
- number to compute shifted exponential
ArithmeticException
- thrown if x is NaNpublic static double log(double x) throws ArithmeticException
x
- a double
ArithmeticException
- thrown if x < 0 or x is NaNpublic static double log1p(double x) throws ArithmeticException
x
- Number.
log(1 + x)
.
ArithmeticException
- thrown if x < 0 or x is NaNpublic static double log10(double x) throws ArithmeticException
x
- a number
ArithmeticException
- thrown if x < 0 or x is NaNpublic static double log(double base, double x) throws ArithmeticException
NaN
if either argument is negative.
If base
is 0 and x
is positive, 0 is returned.
If base
is positive and x
is 0,
Double.NEGATIVE_INFINITY
is returned.
If both arguments are 0, the result is NaN
.
base
- Base of the logarithm, must be greater than 0.x
- Argument, must be greater than 0.
y
such that
basey = x
.
ArithmeticException
- thrown if x < 0 or (base or x) is NaN or base and x = 0MathUtils
, moved as of version 3.0)public static double pow(double x, double y) throws ArithmeticException
x
- a doubley
- a double
ArithmeticException
- thrown if y < 0 and y not an integer or x or y is NaN or x = -1public static double pow(double d, int e) throws ArithmeticException
d
- Number to raise.e
- Exponent.
ArithmeticException
- thrown if d is NaNpublic static double sin(double x) throws ArithmeticException
x
- Argument.
ArithmeticException
- thrown if x is NaN or Infinitypublic static double cos(double x)
x
- Argument.
ArithmeticException
- thrown if x is NaN or Infinitypublic static double tan(double x) throws ArithmeticException
x
- Argument.
ArithmeticException
- thrown if x is NaN or Infinitypublic static double atan(double x) throws ArithmeticException
x
- a number
ArithmeticException
- thrown if x is NaNpublic static double atan2(double y, double x) throws ArithmeticException
y
- ordinatex
- abscissa
-PI
and PI
ArithmeticException
- thrown if x or y is NaNpublic static double asin(double x) throws ArithmeticException
x
- number on which evaluation is done
ArithmeticException
- thrown if x < -1 or x > 1 or x is NaNpublic static double acos(double x) throws ArithmeticException
x
- number on which evaluation is done
ArithmeticException
- thrown if x < -1 or x > 1 or x is NaNpublic static double cbrt(double x) throws ArithmeticException
x
- number on which evaluation is done
ArithmeticException
- thrown if x is NaNpublic static double toRadians(double x) throws ArithmeticException
x
- angle in degrees
ArithmeticException
- thrown if x is NaNpublic static double toDegrees(double x) throws ArithmeticException
x
- angle in radians
ArithmeticException
- thrown if x is NaNpublic static int abs(int x)
x
- number from which absolute value is requested
public static long abs(long x)
x
- number from which absolute value is requested
public static float abs(float x) throws ArithmeticException
x
- number from which absolute value is requested
ArithmeticException
- thrown if x is NaNpublic static double abs(double x) throws ArithmeticException
x
- number from which absolute value is requested
ArithmeticException
- thrown if x is NaNpublic static double ulp(double x) throws ArithmeticException
x
- number from which ulp is requested
ArithmeticException
- thrown if x is NaNpublic static float ulp(float x) throws ArithmeticException
x
- number from which ulp is requested
ArithmeticException
- thrown if x is NaNpublic static double scalb(double d, int n) throws ArithmeticException
d
- number to multiplyn
- power of 2
ArithmeticException
- thrown if d is NaNpublic static float scalb(float f, int n) throws ArithmeticException
f
- number to multiplyn
- power of 2
ArithmeticException
- thrown if f is NaNpublic static double nextAfter(double d, double direction) throws ArithmeticException
The ordering is as follows (increasing):
If arguments compare equal, then the second argument is returned.
If direction
is greater than d
,
the smallest machine representable number strictly greater than
d
is returned; if less, then the largest representable number
strictly less than d
is returned.
If d
is infinite and direction does not
bring it back to finite numbers, it is returned unchanged.
d
- base numberdirection
- (the only important thing is whether
direction
is greater or smaller than d
)
ArithmeticException
- thrown if d or direction is NaNpublic static float nextAfter(float f, double direction) throws ArithmeticException
The ordering is as follows (increasing):
If arguments compare equal, then the second argument is returned.
If direction
is greater than f
,
the smallest machine representable number strictly greater than
f
is returned; if less, then the largest representable number
strictly less than f
is returned.
If f
is infinite and direction does not
bring it back to finite numbers, it is returned unchanged.
f
- base numberdirection
- (the only important thing is whether
direction
is greater or smaller than f
)
ArithmeticException
- thrown if f or direction is NaNpublic static double floor(double x) throws ArithmeticException
x
- number from which floor is requested
ArithmeticException
- thrown if x is NaNpublic static double ceil(double x) throws ArithmeticException
x
- number from which ceil is requested
ArithmeticException
- thrown if x is NaNpublic static double rint(double x) throws ArithmeticException
x
- number from which nearest whole number is requested
ArithmeticException
- thrown if x is NaNpublic static long round(double x) throws ArithmeticException
x
- number from which closest long is requested
ArithmeticException
- thrown if x is NaNpublic static int round(float x) throws ArithmeticException
x
- number from which closest int is requested
ArithmeticException
- thrown if x is NaNpublic static int min(int a, int b)
a
- first valueb
- second value
public static long min(long a, long b)
a
- first valueb
- second value
public static float min(float a, float b) throws ArithmeticException
a
- first valueb
- second value
ArithmeticException
- thrown if a or b is NaNpublic static double min(double a, double b) throws ArithmeticException
a
- first valueb
- second value
ArithmeticException
- thrown if a or b is NaNpublic static int max(int a, int b)
a
- first valueb
- second value
public static long max(long a, long b)
a
- first valueb
- second value
public static float max(float a, float b) throws ArithmeticException
a
- first valueb
- second value
ArithmeticException
- thrown if a or b is NaNpublic static double max(double a, double b) throws ArithmeticException
a
- first valueb
- second value
ArithmeticException
- thrown if a or b is NaNpublic static double hypot(double x, double y) throws ArithmeticException
x
and y
- sqrt(x2 +y2)
x
- a valuey
- a value
ArithmeticException
- thrown if x or y is NaNpublic static double IEEEremainder(double dividend, double divisor) throws ArithmeticException
x - y*n
where n
is the mathematical integer closest to the exact mathematical value
of the quotient x/y
.
If two mathematical integers are equally close to x/y
then
n
is the integer that is even.
Note: this implementation currently delegates to StrictMath.IEEEremainder(double, double)
dividend
- the number to be divideddivisor
- the number by which to divide
ArithmeticException
- thrown if input cannot allow to compute remainderpublic static double copySign(double magnitude, double sign)
sign
argument is treated as positive.
magnitude
- the value to returnsign
- the sign for the returned value
sign
argument
ArithmeticException
- thrown if magnitude is NaNpublic static float copySign(float magnitude, float sign)
sign
argument is treated as positive.
magnitude
- the value to returnsign
- the sign for the returned value
sign
argument
ArithmeticException
- thrown if magnitude is NaNpublic static int getExponent(double d)
For double numbers of the form 2x, the unbiased exponent is exactly x.
d
- number from which exponent is requested
public static int getExponent(float f)
For float numbers of the form 2x, the unbiased exponent is exactly x.
f
- number from which exponent is requested
public static double divide(double x, double y) throws ArithmeticException
x
- numeratory
- denominator
ArithmeticException
- thrown if x / y = NaNpublic static void main(String[] a)
used to generate the preset arrays originally.
a
- unused
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |